Struts 1 - 如何显示ActionMessages

时间:2010-03-08 17:19:43

标签: java struts struts-1

我通过以下命令在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对象 - messageswarnings。 现在,我想在单独的JSP页面上显示这两个内容...一页显示messages,另一页显示warnings

那么如何在JSP页面中指出要显示哪些消息?



更新 - 2

现在,我发现了一件奇怪的事情。

saveMessages(request, messages);
saveMessages(request, warnings);

当我编写上述代码时,只有warnings正在运行。当我颠倒上述两个陈述的顺序时,只有messages正在运作。

似乎我们只能在请求中添加一个ActionMessages对象。如果它是正确的,那么如何分别在两个ActionMessages对象中显示消息。

2 个答案:

答案 0 :(得分:17)

简单,

messageswarnings分开:在您的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上,请求标志并检查用户是否选择了查看消息或警告。 然后根据用户选择保存warningsmessages,并显示相同的页面(如上所述)以显示消息。

原因是,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常量字符串,
  但是如果此属性设置为“true”   将从中检索bean   Globals.MESSAGE_KEY常量字符串。   此外,如果将此设置为“true”,则为任何   分配给name属性的值   将被忽略。

您也可以编写scriptlet以检查这些密钥是否存在,然后通过密钥<logic:iterate />显示消息(但这样做太多了。)

希望这有帮助。

答案 1 :(得分:3)

您可以使用message属性指定您在页面中拥有的ActionMessages对象的名称,而不是使用messagesPresentmessages标记上的name属性。 ,请求,会话或应用程序范围。