2

我正在尝试使用addActionMessage()并将addActionError()操作(例如 in execute())中的消息和错误传递到转发的页面。

在 JSP 中,我使用:

<s:if test="hasActionMessages()">
   <s:actionmessage/>
</s:if>

显示此类消息。

但没有显示任何消息。我想知道是否有人可以解决此问题,或提出其他解决方案。我是 Struts 和 Web 开发的新手,我不确定将消息从操作传递到页面的正确模式是什么。

编辑:动作映射代码和java代码

<action name="myAddUser" class="org.any.backend.action.UserAdminAction" method="addUser">
  <result name="success" type="redirectAction">myUserAdmin</result>
  <result name="input" type="redirectAction">myUserAdmin</result>
</action>

Java代码:

    public String addUser() throws Exception {
    // check duplicate
    for (User u : userList)
        if (u.getUserName().equals(userName)) {
            addActionError("A user with the same user name already exists. Choose another user name. ");
            return INPUT;
        }
    if (userName != null && !userName.isEmpty() && password != null && !password.isEmpty()) {
        User newUser = new User();
        newUser.setUserName(userName);
        newUser.setPassword(password);
        userList.add(newUser);
        addActionMessage("User " + userName + " added. ");
        return SUCCESS;
    } else {
        addActionError("User name and password cannot be empty");
        return INPUT;
    }
}
4

3 回答 3

1

session.setAttribute(...)在行动类中使用。并<logic:present .... >在jsp中标记。希望这会帮助你。

于 2012-10-18T06:18:29.997 回答
1

你的代码是对的。

也许您正在使用 REDIRECT-ACTION 结果类型或 CHAIN。它们都将丢失操作消息和错误,从而迫使您将它们置于此页面的会话中(并在显示后清除它们)。

编辑:我假设您正在使用该块

<s:if test="hasActionErrors()">
       <s:actionerror />
</s:if>
<s:if test="hasActionMessages()">
       <s:actionmessage/>
</s:if>

不仅是发布的,否则您将永远看不到错误,只有消息...

于 2012-10-18T08:59:58.287 回答
1

正如我所看到的,您正在使用重定向操作,您仍然可以使用其中一个拦截器来保留操作错误/消息。

http://struts.apache.org/2.3.1.2/docs/message-store-interceptor.html

这是 struts.xml 中的一个示例

    <action name="submit"
        class="com.dummy.SubmitAction">             

        <interceptor-ref name="store">
            <param name="operationMode">STORE</param>
        </interceptor-ref>
        <interceptor-ref name="defaultStack" />

        <result name="success" type="redirectAction">
            <param name="actionName">view</param>
            <param name="asnid">${id}</param>
        </result>           

    </action>

    <action name="view"
        class="com.dummy.ViewUserAction">
        <interceptor-ref name="store">
            <param name="operationMode">RETRIEVE</param>
        </interceptor-ref>  
        <interceptor-ref name="defaultStack" >
            <param name="workflow.excludeMethods">execute</param>           
        </interceptor-ref>  

        <result name="success">pages/user.jsp</result>

    </action>
于 2012-10-19T01:23:40.383 回答