8

我通过以下命令ActionMessage通过文件显示 s :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对象中分别显示消息。

4

2 回答 2

17

简单的,

messages将 your和 your分开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 上,请求标志并检查用户是否选择查看消息或警告。然后,您保存warningsmessages基于用户选择并显示相同的页面(如您在上面写的)以显示消息。

原因是这样的,Struts(在存储消息或错误时)将其存储在请求或会话中,并具有以下常量。

  • Globals.MESSAGE_KEY (当你这样做时分配saveMessages(request, messages)
  • Globals.ERROR_KEY (当你这样做时分配saveErrors(request, errors)

当使用 时<logic:messagesPresent message="true">,Struts 搜索MESSAGE_KEY(if message=true) 或ERROR_KEY(if message=false) 或两者 (if message=none)。你无法控制它。

<html:messages />TLD 评论指出:

默认情况下,该标签将从 Globals.ERROR_KEY 常量字符串中检索将迭代的 bean,
但如果此属性设置为“true”,则将从 Globals.MESSAGE_KEY 常量字符串中检索 bean。此外,如果将其设置为“true”,则分配给 name 属性的任何值都将被忽略。

您还可以编写scriptlet 来检查这些键是否存在,然后<logic:iterate />通过键来显示消息(但这将是太多的工作)。

希望这可以帮助。

于 2010-03-08T18:06:44.180 回答
3

您可以使用该属性来指定页面、请求、会话或应用程序范围内的 ActionMessages 对象的名称,而不是使用and标记message上的属性。messagesPresentmessagesname

于 2010-03-08T18:00:33.930 回答