ページの読み込みとフォームの送信に別のアクションを作成することは良い習慣ですか? ウェブサイトに登録するために表示したいとしましょう。登録用のリンクをクリックすると、通常はページと登録フォームをリダイレクトする単純なアクションに移動し、送信ボタンをクリックすると、同じアクションがデータを処理してデータベースに送信しますか?
または、フォームの送信に対して別のアクションを実行する方がよいでしょうか?
このシナリオには、実際の「良くも悪くも」というものはありません。複雑さは似ていますが、機能の局所性が異なります。私は一般的に少人数制のクラスが多い傾向にありますが、別の選択肢があります。
私は、単一のアクション、複数のメソッド、および GET と POST の要求を区別するインターセプターを使用する傾向があります。インターセプターは、GET 要求 (例: "input"
) に対して既知の結果を返し、POST 結果 (つまり、通常のアクション呼び出し) の通常の処理を可能にします。
これにより、フォーム処理が標準化され、アプリケーション全体で単純なフォーム処理シナリオのために複数のメソッドを手動で構成する必要がなくなります。
Convention プラグインを使用すると、これは面白くなくなりますが、自動的に行うのは楽しいことです。アプリの GET/POST の「秘密」を知ったら、二度と考える必要はありません。
コメントに対処するには:
異なる機能はどこかに存在する必要があります。
S2 では、これを行う方法が 2 つあります。複数のメソッドを持つアクション、または複数のアクションです。これは、あなたの質問が対処していると私が思ったものです。これは「より良い」ものです。(回答:場合によります。)
以下では XML 構成を使用しています。注釈は本質的に同じです。
複数のアクションを使用するのは簡単です。1つはデフォルトのアクションになることさえあります:
<action name="login">
<result>WEB-INF/jsps/login.jsp</result>
</action>
フォームの準備がなければ、完了です。次に、ログインを行うアクションを構成します。
<action name="doLogin">
<result name="input">WEB-INF/jsps/login.jsp</result>
<result type="redirectAction">home</result>
</action>
複数の方法を使用することはほとんど同じです。
<!-- If LoginAction extends ActionDefault, the "input()" method -->
<!-- is supplied by the base class, and just returns "input". -->
<action name="login" class="com.foo.bar.LoginAction" method="input">
<result name="input">WEB-INF/jsps/login.jsp</result>
</action>
<!-- Default action method is "execute()". -->
<action name="doLogin" class="com.foo.bar.LoginAction">
<result name="input">WEB-INF/jsps/login.jsp</result>
<result type="redirectAction">home</result>
</action>