1

strutsアプリケーションに問題があり、userUpdateActionとしてフォームアクションで詳細を更新するように求められ、フォームBeanはUserUpdateFormです。ユーザーがすでにログインしているかどうかを確認するサーブレットフィルターがあります。彼がログインしなかった場合、私はログインアクションに転送します。彼がログインした場合、私は彼に更新フォームを表示します。検証が成功すると、空白のページに転送されます。

struts-config.xml

<action path="/userUpdateAction" type="com.vaannila.action.userUpdateAction" name="UserUpdateForm" input="/update.jsp"  validate="true" scope="request">
            <forward name="success" path="/updateSuccess.jsp"  />
            <forward name="error" path="/update.jsp" />
</action>

アクションクラス

public class userUpdateAction extends Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest req, HttpServletResponse res) throws Exception {
        UserUpdateForm userform = (UserUpdateForm) form;
        System.out.println("form values:" + userform.getEmail());
        return mapping.findForward("success");
    }
}

転送名は適切です(成功はclassとstruts-config.xmlの両方で正しいです)。

executeメソッドもアクションexecuteメソッドを正しくオーバーライドしています。

Tomcatコンソールでは、次のように表示されます。

user already logged in start chain execution
2 Feb, 2012 9:12:10 AM org.apache.struts.chain.commands.servlet.CreateAction createAction
INFO: Initialize action of type: com.vaannila.action.userUpdateAction
errors : {}

userUpdateActionは初期化されますが、executeメソッドを実行せず、空白のページに移動します。

4

1 に答える 1

0

コメント セクションで、投稿された問題が特定のユーザーに対して解決されたことがわかります。説明と同じ動作をしていました(httpリクエストを送信しましたが、空白のページだけが戻ってきました)。特にここでの最初の回答が私の解決につながるのに役立ったので、他の人のために私の解決を共有したかった.

私のチームと私は、Struts 1.1 から 1.3 にアップグレードしています (大きなジャンプです)。ほとんどすべてのアクション クラスは perform() メソッドを使用していました。v1.1 では、perform() が廃止され、execute() が追加されたことが判明しました。v1.2 では、 perform() が削除されました。この情報は、アップグレード作業を開始する前の最初の調査では見つかりませんでした。元のアプリの作成者が何年も前に execute() を使用しなかった理由はわかりません。

アクション クラスを変更して execute() メソッドを使用すると、すべてが再び機能し始めました。

これにより、将来誰かの時間と労力を節約できることを願っています。

Struts v1.1 API への参照

Struts v1.2 API への参照

于 2014-09-23T16:05:51.230 に答える