Основываясь на том, что я исследовал, я видел, что теги, такие как <s:set>
, <s:push>
или создавая <s:bean>
, могут вставлять ссылки непосредственно на ActionContext
или ValueStack
. Это меня очень смущает, потому что у вас не может быть только одного выделенного места для хранения всего? Вероятно, просто поместите все в ActionContext
, поскольку он в основном действует как ServletContext
.Какова цель хранения объектов непосредственно в ValueStack/ActionContext?
Чтобы сделать его еще более запутанной, если вы хотите получить доступ к значениям в ValueStack
, вы должны будете использовать Struts теги, такие как <s:property>
, но если значение просто хранится в ActionContext
, вы просто использовать #value
префикс предоставленный OGNL.
Может кто-то прояснит это для меня? Когда я использовал Spring, я считаю, что все, что мне нужно (запрос, сеанс, applicationContext), находилось внутри ServletContext
и для доступа к этим значениям на моей веб-странице, я мог бы просто использовать префикс $
для доступа к чему-либо в контексте.
1. * одно специализированное место для хранения всего * - Одна из вещей, о которых стоит подумать, - это «область». Зачем объявлять локальные переменные в методе? 2. * используйте префикс #value * - Неясно, что вы имеете в виду. 3. Вы все равно можете использовать '$' с S2. 4. Просто используйте то, что вам нужно, и если что-то не работает, задайте конкретный вопрос. –
Struts1, Spring MVC и т. Д. - все каркасы Push-MVC. Struts2 - Pull-MVC @Miguel. Вы не вставляете значения в запрос, вы помещаете их в ValueStack, а затем вытаскиваете из JSP с помощью OGNL, JSTL или что-то еще. На самом деле ValueStack - это умная вещь по сравнению с другими фреймворками. –
Вы можете использовать '$' для доступа (большинство) всего в S2. Причина «почему» заключается в том, что именно так решили разработчики WebWork. И нет, вам не нужно * использовать теги S2 для доступа к значениям стека. В стеке значений есть две области: сам стек и именованные элементы в контексте.Так оно и есть. Стек хороша для слоев. –