Находится ли жизненный цикл ValueStack в приложении в struts2?
-
15-11-2019 - |
Вопрос
Я могу установить свойство на ValueStack
несколькими способами.
ValueStack stack = ActionContext.getContext().getValueStack();
stack.getContext().put("resultDTO",resultDTO); //1. creates a different branch
//parallel to root
stack.set("resultDTO", resultDTO); //2. pushes on root as a Map?
stack.push(resultDTO); //3. pushes on root
myActionClass.setProperty(); //4. normal action accessor
Мне нужно иметь возможность вернуть все эти значения в JSP, freemarker и Java, например
stack.findValue() or stack.findString().
Я хочу знать о жизненном цикле каждого из этих 4 методов настройки.Это во всем приложении.Это Стек значений создал каждый запрос, и для каждого запроса в нем установлены значения приложения и сеанса?
Я знаю, что четвертый метод является наиболее распространенным подходом, но, возможно, я не использую его во всех местах, где класс действия недоступен.
У меня есть еще одно сомнение по поводу доступа в JSP.
<s:push value="resultDTO" ><s:property value="data.form1[0]" /></s:push>
<!--5.works for context.put() & stack.set() both-->
<s:property value="#resultDTO.data.form1[0].countryofissue" /> <!--6.context.put()-->
<s:property value="resultDTO.data.form1[0].countryofissue" /> <!--7.stack.set()-->
<s:property value="data.form1[0].countryofissue" /> <!--8.stack.push()-->
Я также хочу знать, как работает 5-я точка в обоих случаях. stack.getContex().put()
и stack.set()
?Я понимаю, что в 6-м результатDTO Я обращаюсь, это другой корень, а в 7-м - это дочерний элемент корня по умолчанию, то есть ValueStack.В 8-м начинает поиск из корня по умолчанию.
я прошел сквозь http://struts.apache.org/2.0.11.1/docs/ognl.html, http://struts.apache.org/2.1.2/struts2-core/apidocs/com/opensymphony/xwork2/util/ValueStack.html и довольно запутанная эта ссылка http://www.opensymphony.com/ognl/html/DeveloperGuide/introduction.html#embeddingOGNL
Сказав все это, я мало склонен использовать stack.getContext().put()
метод, поскольку я могу ясно видеть значения, установив URL-адрес как ?debug=браузер.Посоветуйте мне, если я ошибаюсь.
Решение
А ValueStack
по запросу.Если вы поместите значения в стек, они будут доступны позже в запросе (т. е. на уровне представления), но не выдержат перенаправления, которое будет новым HTTP-запросом и будет иметь свой собственный ValueStack
.
В обычных условиях параметры в URL-адресе или в сообщении формы будут установлены для действия с использованием методов установки действия.В перехватчике вы можете добавлять значения непосредственно в стек.Например, ExceptionMappingInterceptor
использует stack.push(Object)
метод публикации исключений для использования на страницах ошибок.
stack.getContext().put(String, Object)
-- Помещает ключ/значение в карту, которая находится в стеке.Карта представляет контекст стека.stack.set(String, Object)
-- Помещает ключ/значение в карту, которая находится в стеке.Я не уверен, как это связано с предыдущим методом, кроме того, что это другая карта.stack.push(Object)
-- При этом объект помещается в корень стека.
Вам не нужно ничего помещать в стек из слоя представления, поэтому мне любопытно, что вы пытаетесь сделать, что требует этого.