Struts2 devMode Исключение при использовании атрибута «ключ» в теге submit

jsp struts2 ognl

480 просмотра

1 ответ

Я использую Struts2 с включенным, devModeчтобы поймать как можно больше предупреждений и ошибок. Теперь я столкнулся с НЕКОТОРЫМ уведомлением, которое уведомляется только в devMode.

Я использую submitтег и включаю атрибут ключа, чтобы получить текст кнопки "Entrar"из свойства с именем global.BOTON_LOGIN. Кнопка является частью формы, которая вызывает действие, сопоставленное с классом actions.LoginAction:

<s:submit key="global.BOTON_LOGIN" type="button" />

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

30-Mar-2015 00:46:37.855 SEVERE [http-apr-8080-exec-146] com.opensymphony.xwork2.util.logging.jdk.JdkLogger.error Developer Notification (set struts.devMode to false to disable this message): Unexpected Exception caught setting 'global.BOTON_LOGIN' on 'class actions.LoginAction: Error setting expression 'global.BOTON_LOGIN' with value ['Entrar', ]

Я заметил, что HTML-код, сгенерированный для кнопки:

<button type="submit" id="login_global_BOTON_LOGIN" name="global.BOTON_LOGIN" value="Entrar">Entrar</button>

Мой обходной путь, чтобы избавиться от этой записи SEVERE - использовать valueатрибут и getTextметод вместо keyатрибута:

<s:submit value="%{getText('global.BOTON_LOGIN')}" type="button" />

который в свою очередь генерирует этот HTML-код:

<button type="submit" id="login_0" value="Entrar">Entrar</button>

и серьезное уведомление ушло.

Что-то я не так делаю в первом случае?

Автор: Nextor Источник Размещён: 12.11.2019 09:02

Ответы (1)


1 плюс

Решение

Вы использовали значение keyатрибута, которое не связывало кнопку отправки с действием. Теги пользовательского интерфейса Struts обычно связывают значение nameатрибута с действием. Согласно распорок DOCS пролистывать key параметр является

Установите ключ (имя, значение, метка) для этого конкретного компонента

Первый nameатрибут используется для анализа выражения OGNL для установки значения в стек значений. Поскольку у вас нет такого значения, генерируется исключение OGNL, но перехватчик параметров используется для перехвата и игнорирования такого рода исключений. И только если у вас devModeвключено, вы можете увидеть это исключение в логах.

Обычно, если вы используете keyатрибут в теге Struts, вы должны использовать то же имя свойства, что и ключ в файле свойств, чтобы он правильно связывал свойство action.

Автор: Roman C Размещён: 30.03.2015 10:17
Вопросы из категории :
32x32