Является ли жизненный цикл ValueStack в приложении в struts2? - PullRequest
0 голосов
/ 18 февраля 2011

Я могу установить свойство на 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 методов настройки. Это через приложение. ValueStack создается каждый запрос, и значения приложения и сеанса в нем устанавливаются для каждого запроса?

Я знаю, что 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()-->

Я также хочу знать, как работает пятая точка в stack.getContex().put() и stack.set()? Я понимаю, что в 6-ом resultDTO , к которому я обращаюсь, это другой корень, а в 7-м, это дочерний элемент корня по умолчанию, который является ValueStack. В восьмом он начинает поиск с корня по умолчанию.

Я прошел 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 = browser . Посоветуйте мне, если я ошибаюсь.

1 Ответ

0 голосов
/ 18 февраля 2011

ValueStack по запросу.Если вы поместите значения в стек, они будут доступны позже в запросе (т. Е. В слое представления), но не сохранят перенаправление, которое будет новым HTTP-запросом и будет иметь собственный ValueStack.

При нормальных условиях параметры в URL-адресе или в публикации формы будут установлены для действия с использованием методов установки действия.В перехватчике вы можете добавлять значения непосредственно в стек.Например, ExceptionMappingInterceptor использует метод stack.push(Object) для публикации исключений для использования на страницах ошибок.

  • stack.getContext().put(String, Object) - помещает ключ / значение в карту, которая находится в стеке.Карта представляет контекст стека.
  • stack.set(String, Object) - Помещает ключ / значение в карту, которая находится в стеке.Я не уверен, как это относится к предыдущему методу, кроме того, что это другая карта.
  • stack.push(Object) - это помещает объект в корень стека.

Вам не нужно помещать что-либо в стек из слоя представления, поэтому мне любопытно, что вы пытаетесь сделать, для чего это необходимо.

...