/ / Struts2 перехоплювачі та весняна інтеграція - пружина, struts2, перехоплювач, перехоплювач

Struts2 Interceptors and Spring Integration - пружина, struts2, перехоплювач, interceptorstack

Моє запитання є трохи базовим, оскільки я все ще вивчаю Struts2 та Spring, і їх інтеграцію. Коли ми визначаємо перехоплювач у struts.xml, наприклад

<interceptors>
<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

<interceptor-stack name="simpleStack">
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,execute</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>

<default-interceptor-ref name="simpleStack"/>

І якщо в applicationContext.xml у мене є:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="user" class="struts.model.User"/>
<bean id="registerUserAction" class="struts.actions.UserInformationAction">
<property name="userBean" ref="user"/>
</bean>

<bean id="chooseUsernamePasswordAction" class="struts.actions.ChooseUsernameAction">
<property name="userBean" ref="user"/>
</bean>
</beans>

Без перехоплювача визначено, що користувач єпостійні в обох діях (registerUserAction -> JSP -> selectUsernamePasswordAction), і я можу отримати доступ до властивостей. Як тільки вводять перехоплювач, схоже, що ці значення знімаються.

  1. Спочатку з того, що я прочитав, виглядає, як я можуробити це все неправильно. тобто з вбудованою системою Spring, всі ці елементи знаходяться в режимі за умовчанням в одиночному режимі, що може бути неправильним, оскільки декілька користувачів будуть реєструватися, і тому кожен повинен мати свої власні дії / користувацькі компоненти.
  2. Що відбувається чи потрібно робити, щоб передавати інформацію по всьому світу, і щоб перехватчики працювали правильно.

Відповіді:

1 для відповіді № 1

Якщо Ви чітко визначаєте свої дії в конфігурації Spring, які вони повинні визначити як scope="prototype". Це "відносно незвично", вам потрібно визначити їх вручну, якщо ви спеціально не хочете використовувати конфігурацію XML для всього, як ін'єкційне обслуговування і так далі.

Мені зовсім не зрозуміло, що ви хочете з користувацьким компонентом може використовуйте весняну сесійну діаманту, доступну знавесні веб-контексти. Я не знаю, наскільки це необхідно, я звичайно робив це вручну і вибрав бен із сеансу, коли мені це насправді потрібно. Мабуть, не має значення.

Зауважте також, що ваш стек істотно виключає все Struts 2 функціональність, як перетворення параметрів форми в властивості дій. Це може бути наміром, але це малоймовірно.


0 для відповіді № 2

Подивіться на це struts-default.xml. Тепер перевірте стек перехоплювача по імені defaultStack. У кінці документа цей стек встановлюється як стек перехоплювача за умовчанням. Як пояснив Дейв Ньютон, вся магія стійок 2 походить від своїх перехоплювачів.

В основному, коли ви встановлюєте свій стек за замовчуваннямстека, ви замінюєте стек, який містить 17 перехоплювачів, на один, який містить лише 1. Таким чином, ви відмовилися від багатьох функцій, таких як ін'єкційний параметр, наприклад, наданий перехоплювачем Параметр.

Також зауважте, що включений перевіряючий перехоплювач defaultStack, але з різним параметром виключити Методи.


0 для відповіді № 3

Ми також використовуємо ту ж структуру проекту

Struts2 + Spring + Hibernate

Перш ніж користуватись перехоплювачем Struts, ми зможемо пройти цей параметр

Але після використання перехоплювача ми не можемо відправляти параметри (значення нульові)

Щоб уникнути цього, скористайтеся params перехоплювач, то ви можете передавати параметри

напр .:

<action name="doUpload_valid1" method="importExcel" class="validationAction">
<interceptor-ref name="params"/>
<interceptor-ref name="fileUpload"/>

<result name="error">jsp/cmdbValidPage.jsp</result>
<result name="success">jsp/testJob.jsp</result>
</action>