Простой,
Разделите ваши messages
и ваши warnings
: в ваших действиях на стойках сохраните свои сообщения и предупреждения следующим образом:
//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 Action запросите флаг и проверьте, выбрал ли пользователь просмотр сообщений или предупреждений.
Затем вы сохраняете warnings
или messages
в зависимости от выбора пользователя и отображаете ту же страницу (как вы написали выше) для отображения сообщений.
Причина в том, что Struts (при хранении ваших сообщений или ошибок) сохраняет его по запросу или в сеансе со следующей константой.
- Globals.MESSAGE_KEY (назначается, когда вы делаете
saveMessages(request, messages)
)
- Globals.ERROR_KEY (назначается, когда вы делаете
saveErrors(request, errors)
)
при использовании <logic:messagesPresent message="true">
Struts ищет MESSAGE_KEY
(если message = true) или ERROR_KEY
(если message = false) или оба (если message = none). Вы не можете это контролировать.
<html:messages />
Комментарии TLD гласят:
По умолчанию тег будет извлекать
боб будет перебирать из
Globals.ERROR_KEY константная строка,
но если этот атрибут установлен в «истина»
боб будет извлечен из
Globals.MESSAGE_KEY константная строка.
Также, если для этого параметра установлено значение «true», любой
значение, присвоенное атрибуту имени
будет игнорироваться.
Вы также можете написать скриптлет, чтобы проверить, существуют ли эти ключи, а затем <logic:iterate />
через клавишу для отображения сообщений (но это будет слишком много работы).
Надеюсь, это поможет.