2015-09-05 2 views
2

В проекте Struts 2, рассмотрим ниже ключа в ресурсах сообщений:Struts 2 Динамическое сообщение с OGNL

export.filename.accountsummary=customer ${export} 

Акция export подается и присваивателя. Если вы вызываете getText("export.filename.accountsummary"), стойки автоматически вызывают getExport() и заполняют его правильным значением. (Я думаю, что struts используют OGNL, также просматривают сообщения ресурсов, которые поддерживаются ${}) Это правильно?!

Я пытаюсь использовать customer ${#sessionScope.CurrentUser.userName} ожидаемый, что стойки используют это выражение OGNL, но это не сработало.

ответ

2

Похоже, что переменная sessionScope недоступна в контексте (если вы ее не поместили вручную). Не перепутайте его с областью видимости сеанса JSP (синтаксис аналогичен синтаксису, который используется в JSP для EL, но Struts2 не использует JSP EL-механизм там), все в выражении OGNL оценивается против контекста OGNL. Вы можете использовать синтаксис ${} в сообщениях, Struts анализирует его значение для выражения OGNL, и этот синтаксис определяет область выражения, которая оценивается после удаления ${}.

+0

Я использую getText в перехватчике. Итак, как вы думаете, это лучший способ сделать это. –

+0

Вы можете использовать его в перехватчике, потому что вы можете получить экземпляр действия там, и он реализует «TextProvider». IMHO, вы можете использовать 'getText' в действии и перехватчике бесплатно, если вы понимаете, как это работает, но в ресурсах сообщений вы также можете использовать переменные MessageFormat. Каким бы ни был наилучший способ, зависит от вас, лично я предпочитаю второй путь. –

1

Я обнаружил, что стек Вейл уже сеанс в нем с #session так

${#session.['CurrentUser'].farsiFirstName} 
${#session.CurrentUser.farsiFirstName} 

работает отлично.

+0

Почему вы отметили ответ, который не отвечает на ваш вопрос как принятый? Upvote достаточно в этом случае. –

Смежные вопросы