简单,
将您的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 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 cmets 声明:
默认情况下,标签将检索
bean 它将从
Globals.ERROR_KEY 常量字符串,
但如果此属性设置为“真”
bean 将从
Globals.MESSAGE_KEY 常量字符串。
此外,如果将其设置为“true”,则任何
分配给 name 属性的值
将被忽略。
您也可以编写scriptlet 来检查这些键是否存在,然后通过该键<logic:iterate /> 来显示消息(但这将是太多的工作)。
希望这会有所帮助。