struts2: избегайте жесткого кода в тегах struts, jsp

При использовании struts2 я могу получить доступ к своим атрибутам сеанса внутри тегов struts2, используя выражение OGNL следующим образом:

#session['object_key']

Проблема в том, что я использую это выражение на разных страницах, каждый раз жестко кодируя эту строку 'object_key'. Есть ли способ использовать любую именованную константу, чтобы я мог легко изменить ключ, используемый для хранения моего объекта в карте сеанса?


person pavel_kazlou    schedule 25.11.2011    source источник
comment
Вы имеете в виду объявление статической константы внутри вашего класса действий?? вы можете объявить метод и установить значение внутри этого метода, просто попробуйте что-нибудь @vs@someMethod(), где vs относится к стеку значений   -  person Umesh Awasthi    schedule 25.11.2011
comment
@umesh Я ищу любое решение, которое поможет избежать жесткого кодирования ключа. Пожалуйста, опубликуйте ответ, если он у вас есть.   -  person pavel_kazlou    schedule 25.11.2011
comment
см. ответ Дейва, собирался написать то же самое :)   -  person Umesh Awasthi    schedule 25.11.2011


Ответы (1)


Конечно, используйте статическую константу; есть несколько вариантов, как это сделать.

По умолчанию, доступ по полному имени:

<s:property value="#session[@app.Constants@OBJECT_KEY]" />

Подробнее см. в разделе Доступ к статическим свойствам в Основы OGNL.

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

Тогда все, что нужно в JSP, это:

${session[OBJECT_KEY]}
person Dave Newton    schedule 25.11.2011
comment
Спасибо, Дэйв. Что вы думаете об идее создать отдельный файл jsp, где все необходимые константы помещаются в переменную struts2, например: <s:set name="SESSION_NAME" value="#session[@app.Constants@OBJECT_KEY]" />, а затем включают этот jsp и используют синтаксис вашего второго примера, но без возни со стеком перехватчика? - person pavel_kazlou; 25.11.2011
comment
Там неправильный пример кода, должно быть <s:set name="SESSION_NAME" value="@app.Constants@OBJECT_KEY" /> - person pavel_kazlou; 25.11.2011
comment
@pavel_kazlou Я думаю, что создание JSP для этого — пустая трата времени и дополнительная ненужная работа по сравнению с более разумными решениями. - person Dave Newton; 25.11.2011