HOWTO установить параметр с помощью тега «result» в struts2 и получить его в полученном шаблоне - PullRequest
1 голос
/ 07 марта 2012

У меня есть рабочий процесс, в котором мне нужно отобразить страницу исключения.Но эта страница исключений является общей и может вызываться в различных ситуациях.Мне нужно отобразить некоторый пользовательский текст на каждой из этих страниц исключений.Поэтому я решил, что я могу установить некоторый «параметр» в теге результата, и он будет автоматически доступен на возможной странице JSP.Но я не могу получить (или установить) его.Вот мой соответствующий код -

struts.xml -

 <global-results>
        <result name="TV_ACCESS_NOT_ALLLOWED">
            <param name="location">/jsp/base/exception/accessNotAllowedException.jsp</param>
            <param name="appDisplayName">Television</param>
        </result>
        <result name="RADIO_ACCESS_NOT_ALLLOWED">
            <param name="location">/jsp/base/exception/accessNotAllowedException.jsp</param>
            <param name="appDisplayName">Radio</param>
        </result>            
    </global-results>

На моей странице JSP я пробовал следующие варианты -

<gs:property value="%{appDisplayName}" />
<gs:property value="#appDisplayName" />
<gs:property value="appDisplayName" />
<gs:property value="%{param.appDisplayName}" />
<gs:property value="#param.appDisplayName" />
<gs:property value="param.appDisplayName" />

Ни один из них не работал.Если вы, ребята, можете указать мне правильное направление, это будет оценено.Также есть способ распечатать все переменные, доступные в текущем контексте, в том числе.сеанс, страница, области запроса?

ОБНОВЛЕНИЕ Я решил проблему, установив переменную в родительском действии, которое первоначально вызвало исключение.Я не хотел делать это изначально, потому что я не хотел загрязнять родительское действие, но я изменил свой шаблон для обработки обычного потока вещей, чтобы использовать новую переменную.

1 Ответ

1 голос
/ 08 марта 2012

Используйте глобальные сопоставления исключений для этой цели, а не результат, вам нужен результат, но именно сопоставление исключений разрешает результат, см. Здесь: https://cwiki.apache.org/WW/exception-handling.html

Я не уверен, но я бы распечатал вручную, если захочу, #session - это карта итерируемых элементов, поэтому должно работать (не проверено) следующее:

<h1>From Session</h1>
<s:iterator value="#session">  
 Session Key: <s:property/>
 <ol>
 <s:iterator>
   <li><s:parameter/></li>
 </s:iterator>
 </ol>
</s:iterator>

Вы должны будете сделать выше для #application, #request, #page ... что угодно.

Более простой способ, если вы не возражаете против json ... - это создать действие со всеми интерфейсами "Aware", которые вам нужны, с типом результата json (с помощью плагина struts2-json), что действительно приятно этот плагин json будет сериализовать всех открытых членов этих объектов, независимо от того, насколько глубоко они вложены.

...