Находится ли жизненный цикл ValueStack в приложении в struts2?

StackOverflow https://stackoverflow.com/questions/5037561

Вопрос

Я могу установить свойство на 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) -- При этом объект помещается в корень стека.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top