2

アクション(例:)から転送されたページにメッセージとエラーを使用addActionMessage()して渡そうとしています。addActionError()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

あなたのコードは正しいです。

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

リダイレクト アクションを使用していることがわかりましたが、インターセプターの 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 に答える
1

session.setAttribute(...)アクションクラスで使用。そして<logic:present .... >jspでタグ付けします。これがあなたを助けることを願っています。

于 2012-10-18T06:18:29.997 に答える