【问题标题】:Struts 1 - How to display ActionMessagesStruts 1 - 如何显示 ActionMessages
【发布时间】:2010-03-08 17:19:42
【问题描述】:

我通过以下命令通过JSP 文件显示ActionMessages:

<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 页面中指明要显示哪些消息?



更新 - 2

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

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

当我编写上面的代码时,只有warnings 在工作。当我颠倒上述两个语句的顺序时,只有messages 起作用了。

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

【问题讨论】:

  • Globals.XXX_KEY 常量在请求或会话时存储一次。因此,为什么你会觉得你的方法很奇怪。

标签: java struts struts-1


【解决方案1】:

简单,

将您的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) 时分配)

当使用&lt;logic:messagesPresent message="true"&gt; 时,Struts 搜索MESSAGE_KEY(如果 message=true)或ERROR_KEY(如果 message=false)或两者(如果 message=none)。你无法控制它。

&lt;html:messages /&gt; TLD cmets 声明:

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    除了在messagesPresent 和messages 标记上使用message 属性,您可以使用name 属性来指定您在页面、请求、会话或应用程序范围内拥有的ActionMessages 对象的名称.

    【讨论】:

    • 我还可以从 ActionMessages 对象中选择特定消息吗?
    • 您可以使用property 属性按属性选择特定消息。除此之外,我认为您必须自己迭代 ActionMessages。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2012-02-24
    • 2013-03-17
    相关资源
    最近更新 更多