Struts 1 - 如何显示ActionMessages

Yat*_*oel 8 java struts struts-1

ActionMessage通过JSP以下命令在文件中显示s :

<logic:messagesPresent message="true">
    <ul id="messsages">
        <html:messages id="msg" message="true">
            <li><bean:write name="msg"/> </li>
        </html:messages>
    </ul>
</logic:messagesPresent>
Run Code Online (Sandbox Code Playgroud)

现在我想只显示选定的消息.如何指示要显示的消息?

更新

其实我有两个ActionMessages对象 - messageswarnings.现在我想在单独的JSP页面上显示它们......显示一个页面messages和其他页面warnings.

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



更新 - 2

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

saveMessages(request, messages);
saveMessages(request, warnings);
Run Code Online (Sandbox Code Playgroud)

当我写上面的代码时,只有warnings工作.当我颠倒了上述两个陈述的顺序时,那只是messages起作用了.

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

Buh*_*ndi 17

简单,

将您messages和您的内容分开warnings:在您的struts操作中,保存您的消息和警告,如下所示:

//For messages
saveMessages(request, messages);

//For warnings
saveErrors(request, warnings);
Run Code Online (Sandbox Code Playgroud)

要显示它们:

<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>
Run Code Online (Sandbox Code Playgroud)

这显示全部messages(通过设置message="true")

<html:messages id="aMsg" message="true">
Run Code Online (Sandbox Code Playgroud)

这显示全部warnings(通过设置message="false")

<html:messages id="aMsg" message="false">
Run Code Online (Sandbox Code Playgroud)

更新看到您现在正在清除您的问题,最简单的方法就是这样做.

有一个标志,表明用户是否想要查看messageswarnings.在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)或两者(如果message = none).你无法控制它.

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

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

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

希望这可以帮助.