0

私が使用するstruts.xmlでは:

<result name="error">error</result>

次に、私のアクションで使用します:

addActionError("ERROR RETURNED");
return ERROR;

フォームを送信すると、空白のページに移動し、何もしません。ただし、アクションで強制的に例外をスローすると、エラー ページに移動し、ActionError メッセージが表示されます。だから私はこれを間違っていますか?もしそうなら、高価なトライキャッチだけに頼るのではなく、「ifステートメント」を使用してエラーページを表示するようにストラットに指示するにはどうすればよいですか?

詳細については、以下の編集をご覧ください。

編集1:

私はStruts 2バージョンを使用しています:2.1.8.1

編集2:

たとえば、テストに使用しているアクション コードは次のとおりです。

String test = "";
int number = 0;
        try {
        if (number == 1) {
            test = SUCCESS;
        } else if (number == 2) {
            addActionError("ERROR RETURNED?");
            test = ERROR;
        } else if (number == 3) {
            addActionError("ERROR RETURNED?");
            test = INPUT;
        } else {
            test = LOGIN;
        }
        } catch (Exception e) {
            addActionError("ERROR RETURNED? " + e);
        }
        return test;

ここに私のnumber.jspコードがあります:

<s:form action="number_save" method="post">
     <s:textfield name="number" label="Enter number" />
</s:form>
<s:actionerror />

編集3:

これが私の struts.xml の長いバージョンです:

 <action name="number" method="numberCreate" class="NumberActionBean">
       <result>number.jsp</result>
 </action>

<action name="error">
    <result>error.jsp</result>
</action>

<action name="number_save" method="numberSave" class="NumberActionBean">
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success" type="redirect">index</result>
            <result name="input" type="redirect">number</result>
            <result name="error">error</result>
            <result name="login" type="redirect">login</result>
            <result name="none">number</result>
</action>

編集4:

Myは、一般的な taglibs と html タグを含むerror.jsp単なるタグです...<s:actionerror />

結論

AddActionError例外がない限り、メッセージを表示できません。ifアクションでステートメントを使用できません。

4

3 に答える 3

2

多分あなたはこれをするべきです:

<result name="error">error.jsp</result>

次に、error.jsp で:

<s:actionerror/>

結果として「error.jsp」の代わりに「error」のみを入力すると、ストラットは「エラー」をアクションとして処理するため、エラーメッセージは表示されません。

最高、j

あなたの編集3のために:

<action name="error">
  <result name="error">error.jsp</result>
</action>

<action name="number_save">
  <result name="error" type="redirectAction">error</result>
</action>
于 2012-06-25T09:02:14.020 に答える
0

ここでの唯一の懸念が「高価なトライキャッチ」である場合、私はこれを進めません。これはサブ最適化であり、複雑さをもたらし、長期的には、ミリ秒単位のパフォーマンスよりも維持コストが高くなります。

例外が実際にスローされない限り、try ブロックによって大きなコスト オーバーヘッドが追加されることはありません。そして、このコンテキストで「大きなオーバーヘッド」について話すとき、それは数ミリ秒の範囲です。

そして、なぜエラーページを最適化しようとしているのですか? 頻繁に呼び出されるようなものではありません。

于 2012-06-25T10:40:01.797 に答える
0

ソリューションの概要:

1

「エラー」をアクションとしてリダイレクトしないでください。

<result name="error"> **error.jsp** </result>

2

エラーメッセージでエラーアクションをredictしたい場合。このリンクをチェックしてください:implement-message-store-interceptor

于 2012-06-25T11:29:07.173 に答える