Struts 1 - Как отобразить ActionMessages
Вопрос
Я демонстрирую ActionMessage
s через a JSP
файл с помощью следующей команды:
<logic:messagesPresent message="true">
<ul id="messsages">
<html:messages id="msg" message="true">
<li><bean:write name="msg"/> </li>
</html:messages>
</ul>
</logic:messagesPresent>
Теперь я хочу отображать только выбранные сообщения.Как я могу указать, какое сообщение отображать?
Обновленный
На самом деле у меня есть два ActionMessages
объект - messages
и warnings
.Теперь я хочу отобразить их оба на отдельных JSP
Страница...Одна страница для показа messages
и другие для warnings
.
Итак, как указать в JSP
страница, на которой какие сообщения отображать?
Обновлено - 2
Так вот, я обнаружил странную вещь.
saveMessages(request, messages);
saveMessages(request, warnings);
Когда я писал приведенный выше код, только warnings
работал.Когда я поменял порядок двух приведенных выше утверждений на противоположный, то только messages
работал.
Кажется, что мы можем добавить только один ActionMessages
объект в запросе.Если это правильно, то как отображать сообщения в двух ActionMessages
объекты по отдельности.
Решение
Простой,
Отделите свой messages
и твой warnings
:В своем действии struts сохраните свои сообщения и предупреждения следующим образом:
//For messages
saveMessages(request, messages);
//For warnings
saveErrors(request, warnings);
Чтобы отобразить их:
<logic:messagesPresent message="true">
<html:messages id="aMsg" message="true">
<logic:present name="aMsg">
<!-- Messages -->
<div class="messages">
<bean:write name="aMsg" filter="false" />
</div>
</logic:present>
</html:messages>
</logic:messagesPresent>
<logic:messagesPresent message="false">
<html:messages id="aMsg" message="false">
<logic:present name="aMsg">
<!-- Warnings-->
<div class="warnings">
<bean:write name="aMsg" filter="false" />
</div>
</logic:present>
</html:messages>
</logic:messagesPresent>
При этом отображаются все messages
(установив message="true"
)
<html:messages id="aMsg" message="true">
При этом отображаются все warnings
(установив message="false"
)
<html:messages id="aMsg" message="false">
Обновить Видя, что вы сейчас проясняете свой вопрос, самым простым способом было бы сделать это.
Иметь определенный флаг, который будет указывать, хотел бы пользователь просмотреть messages
или warnings
.В действии Struts запросите флаг и проверьте, выбрал ли пользователь просмотр сообщений или предупреждений.Затем вы сохраняете либо warnings
или messages
на основе выбора пользователя и отображения той же страницы (как вы написали выше) для отображения сообщений.
Причина в этом, Struts (при сохранении ваших сообщений или ошибок) сохраняет его по запросу или сеансу со следующей константой.
- Глобальные.MESSAGE_KEY (который присваивается при выполнении
saveMessages(request, messages)
) - Глобальные переменные.ERROR_KEY (который присваивается при выполнении
saveErrors(request, errors)
)
при использовании <logic:messagesPresent message="true">
, Struts выполняет поиск MESSAGE_KEY
(если сообщение= true) или ERROR_KEY
(если сообщение=false) или оба (если сообщение = нет).Ты не можешь это контролировать.
<html:messages />
Состояния комментариев к TLD:
По умолчанию тег извлекает компонент, который он будет повторять из Глобальных переменных.Строка константы ERROR_KEY,
но если для этого атрибута установлено значение 'true' компонент будет извлечен из Глобальных данных.Строка константы MESSAGE_KEY.Также, если для этого параметра установлено значение 'true', любое значение, присвоенное атрибуту name , будет проигнорировано.
Вы также можете написать скриптлет, чтобы проверить, существуют ли эти ключи, затем <logic:iterate />
с помощью клавиши для отображения сообщений (но это потребует слишком много работы).
Надеюсь, это поможет.
Другие советы
Вместо того, чтобы использовать message
атрибут на messagesPresent
и messages
теги, вы можете использовать name
атрибут, указывающий имя объекта ActionMessages, который у вас есть в области страницы, запроса, сеанса или приложения.