1.

getInputForward

この記事の要点
  • Struts 1 の ActionMapping#getInputForward() メソッド
  • <action> の input 属性に指定した遷移先を ActionForward として取得
  • 主用途: フォームのバリデーション失敗時に入力画面へ戻す
  • return mapping.getInputForward(); を execute() 内で呼ぶ

 

Struts 1 の ActionMapping#getInputForward() についての記事です。struts-config.xml の <action> タグで指定した input 属性の遷移先を、ActionForward として取得します。入力エラー時に元のフォーム画面へ戻すときに使う代表的なメソッドです。

定義

inputForwardがfalseならパス、trueならforward名として解決する図

Struts 1は保守終了済みです。この記事は既存システムの読解・保守向けで、新規導入の推奨ではありません。以下の条件はStruts 1.3.10の公開ソースと実体で照合しました。

修飾子と型 メソッドと説明
public ActionForward getInputForward()
「struts-config.xml」の<action>内のinputとcontrollerのinputForward設定から戻り先のActionForwardを取得します。メソッド自体は画面遷移しません。

一般的な使い方

元のexecute例は処理の断片です。validateInput(form)はアプリ独自の検証メソッドを想定しており、Strutsの組み込みメソッドではありません。Actionクラス・検証処理・フォーム・JSPは別途必要です。

フォームのバリデーションが失敗したとき、入力画面に戻すために execute() 内から呼びます。

public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest req,
        HttpServletResponse res) throws Exception {

    ActionErrors errors = validateInput(form);
    if (!errors.isEmpty()) {
        saveErrors(req, errors);
        return mapping.getInputForward(); // 入力画面に戻る
    }

    // 正常処理
    return mapping.findForward("success");
}

struts-config.xml 側の設定

以下の元の設定例はcontrollerのinputForward=false(既定値)を前提とします。このモードではinputをパスとしてActionForwardを生成します。inputForward=trueにするとinputをforward名として検索するため、同じ設定の意味にはなりません。

<action path="/userRegister"
        type="com.example.UserRegisterAction"
        name="userForm"
        scope="request"
        input="/user/registerForm.jsp">
    <forward name="success" path="/user/registerSuccess.jsp"/>
</action>

inputForward=falseの場合、getInputForward() は /user/registerForm.jsp を指す ActionForward を返します。

findForward との違い

メソッド遷移先の決め方主な用途
getInputForward()<action> の input 属性入力エラー時に元の入力画面に戻る
findForward("name")<forward name="..."/> の path正常処理後の遷移、複数パターンの分岐

注意点

  • input未指定の戻り値はモードで異なります。inputForward=falseではパスがnullのActionForwardが生成され、オブジェクト自体はnullではありません。trueでは名前解決に失敗するとnullが返ります。どちらも有効な画面へ戻れる設定とはいえません。
  • 自動入力検証 (validate="true") を使う場合、エラー時には Struts が自動で input 先へ戻すため、getInputForward() を明示的に呼ぶ必要はない
  • Struts 1 系は 2013 年に EOL。新規開発では Spring MVC 等が選択肢

inputForward設定別の戻り値

controller設定inputの意味戻り値
false(既定)/user/registerForm.jspなどのパスそのパスで新しいActionForwardを生成。redirectはfalse
trueinputFormなどのforward名findForward(input)の検索結果。設定済みredirect等も引き継ぐ
false、input未指定nullActionForwardは非null、getPath()はnull
true、名前が未登録解決できない名前null

findForwardはAction内のローカルforwardを先に調べ、なければモジュールのglobal-forwardを調べます。同名ならローカルが優先されます。上の比較表のgetInputForwardも、trueモードではこの名前検索を利用する点に注意してください。

名前で入力画面を指定する設定例

既存のstruts-configへ差し込む設定断片です。controllerは同じモジュールの既存設定を確認し、重複追加やファイル全体の上書きをしないでください。フォーム定義やActionクラスは省略しています。

<action path="/userRegister" type="com.example.UserRegisterAction"
        name="userForm" scope="request" input="inputForm">
    <forward name="inputForm" path="/user/registerForm.jsp" redirect="false"/>
    <forward name="success" path="/user/registerSuccess.jsp"/>
</action>
<!-- Existing controller settings must be retained. -->
<controller inputForward="true"/>

inputの値はパスでなくinputFormです。redirect=trueのforwardを選ぶと後続処理の挙動も変わり、request属性の入力エラーなどを次のリクエストへそのまま渡せません。画面へ戻す際のscopeとエラー表示の設計も確認します。

戻り値だけを確認する独立したJava例

次はInputForwardExample.javaです。Struts 1.3.10 / Java 21でModuleConfigとControllerConfigを明示して実行しました。既存アプリの設定を読み込む例ではなく、2モードと未指定時の戻り値を切り分ける例です。

package example;

import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.config.ControllerConfig;
import org.apache.struts.config.impl.ModuleConfigImpl;

public class InputForwardExample {
    public static ActionMapping mapping(boolean inputForward, String input) {
        ModuleConfigImpl module = new ModuleConfigImpl("");
        ControllerConfig controller = new ControllerConfig();
        controller.setInputForward(inputForward);
        module.setControllerConfig(controller);
        ActionMapping mapping = new ActionMapping();
        mapping.setModuleConfig(module);
        mapping.setInput(input);
        return mapping;
    }

    public static void main(String[] args) {
        ActionMapping path = mapping(false, "/user/registerForm.jsp");
        System.out.println("path=" + path.getInputForward().getPath());

        ActionMapping named = mapping(true, "inputForm");
        named.addForwardConfig(new ActionForward("inputForm", "/user/registerForm.jsp", false));
        System.out.println("named=" + named.getInputForward().getPath());

        ActionMapping missing = mapping(false, null);
        System.out.println("missingPath=" + missing.getInputForward().getPath());
    }
}

出力

path=/user/registerForm.jsp
named=/user/registerForm.jsp
missingPath=null

単独でnew ActionMapping()だけを生成すると、モジュール設定がなくgetInputForward()でNullPointerExceptionになる条件も確認しました。これは独立テストの設定不足で、通常の本番例外をこの原因と断定する説明ではありません。

入力画面へ戻らないときの確認順

  1. 対象モジュールのcontroller.inputForwardがfalseかtrueかを確認する。
  2. falseならinputのパス、trueならinputとforwardの名前の一致を確認する。
  3. 戻り値がnullか、getPath()がnullか、redirectがtrueかを別々に確認する。
  4. 設定を取得できたことと実際のJSP表示を分け、対象リソース・コンテキスト・権限・エラー表示を確認する。
  5. ActionFormの自動validateとexecute内の独自検証を区別する。前者は設定とRequestProcessorによってexecute前に入力画面へ戻るため、executeへ到達したと決めつけない。

追加8テストでパス/名前モード、未指定、ローカル/グローバルと優先順位、redirect、モジュール未設定、掲載出力を確認しました。Tomcat上のXML読込・Action実行・JSP描画・自動検証を含むアプリ全体は未検証です。

一次資料: Apache公開ActionMapping Javadoc 1.3.10、Apache配布の1.3.10ソース、Struts 1 EOL告知(2026年10月確認)。

子ページ

子ページはありません

同階層のページ

同階層のページはありません