我通过以下命令在ActionMessage
文件中显示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
页面中指出要显示哪些消息?
现在,我发现了一件奇怪的事情。
saveMessages(request, messages);
saveMessages(request, warnings);
当我编写上述代码时,只有warnings
正在运行。当我颠倒上述两个陈述的顺序时,只有messages
正在运作。
似乎我们只能在请求中添加一个ActionMessages
对象。如果它是正确的,那么如何分别在两个ActionMessages
对象中显示消息。
答案 0 :(得分:17)
简单,
将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(存储消息或错误时)将其存储在请求或会话中,并带有以下常量。
saveMessages(request, messages)
时分配)saveErrors(request, errors)
时分配)使用<logic:messagesPresent message="true">
时,Struts会搜索MESSAGE_KEY
(如果message = true)或ERROR_KEY
(如果message = false)或两者都搜索(如果message = none)。你无法控制它。
<html:messages />
TLD评论指出:
默认情况下,标签会检索 它将从中迭代 Globals.ERROR_KEY常量字符串,
但是如果此属性设置为“true” 将从中检索bean Globals.MESSAGE_KEY常量字符串。 此外,如果将此设置为“true”,则为任何 分配给name属性的值 将被忽略。
您也可以编写scriptlet以检查这些密钥是否存在,然后通过密钥<logic:iterate />
显示消息(但这样做太多了。)
希望这有帮助。
答案 1 :(得分:3)
您可以使用message
属性指定您在页面中拥有的ActionMessages对象的名称,而不是使用messagesPresent
和messages
标记上的name
属性。 ,请求,会话或应用程序范围。