1

Struts 2 の Message Store Interceptor に問題があります。struts.xml ファイルに次のアクションがあります。

<action name="rfi" method="add" class="org.test.action.RfiAction">
    <interceptor-ref name="store">
        <param name="operationMode">AUTOMATIC</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack" />
    <result name="error">../display/irrt/rfi.jsp</result>
    <result name="input">../display/irrt/rfi.jsp</result>
    <result name="success" type="redirectAction">
        <param name="actionName">rfis</param>
        <param name="namespace">/irrt</param>
    </result>
</action>

アクションが正常に戻ると、リストされているアクションにリダイレクトされ、成功メッセージが適切に保存され、インターセプターによって取得されます。

ただし、エラーが発生した場合、リダイレクトはなく、リストされた JSP ページに移動しますが、エラーは表示されません (他のすべてのデータは表示されます)。これは、実行時に MessageStoreInterceptor がエラー変数の内容を消去して、リダイレクトが発生しない場合、現在のアクションにエラー メッセージが表示されないようにするようなものです。

これは、インターセプターが STORE モードまたは AUTOMATIC モードに設定されている場合に発生します (インターセプターが AUTOMATIC モードであり、結果にリダイレクトが含まれていない場合、インターセプターは実行されるべきではありませんが)。

私のコードは、エラーまたはメッセージを追加するだけです。それらを削除することはありません。アクション コードは次のとおりです。

private String add()
{
    try
    {
        // add the rfi entry
        this.rfiService.addRfi(this.rfiEntry, this.getLoggedInUser());
    }
    catch(ConnectionException e)
    {
        this.addActionError("Could not add RFI entry.");
        e.printStackTrace();

        return ERROR;
    }

    // set success message
    this.addActionMessage("RFI entry added.");

    return SUCCESS;
}

これは、メッセージを表示するために使用されている JSP のコードです。

<s:if test="hasActionErrors() == true">
    <s:iterator value="actionErrors">
        <p class="text"><b><font color="red"><s:property /></font></b></p>
    </s:iterator>
</s:if>
<s:elseif test="hasActionMessages() == true">
    <s:iterator value="actionMessages">
        <p class="text"><b><font color="green"><s:property /></font></b></p>
    </s:iterator>
</s:elseif>

この問題に関するヘルプをいただければ幸いです。

4

2 に答える 2

0

エラーを含むこの特定のページのインクルードがありませんでした。

話の教訓: 他のすべてのページにあるコードが、機能していないページにあると仮定しないでください。

于 2013-10-29T18:16:47.580 に答える
0
<result name="success" type="redirectAction">
        <param name="actionName">rfis</param>
        <param name="namespace">/irrt</param>
    </result>

redirectActionもインターセプターrfisを通過する必要があります。store

<action name="rfis" class="..." method="...">
    <interceptor-ref name="store">
        <param name="operationMode">AUTOMATIC</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack" />
    <result ..../>
</action>
于 2013-10-29T02:25:44.797 に答える