0

私はStruts2を使用しています。同じコードを持つ 2 つの Web フォームがあります。1つのフォームを削除したいと思います。これが私のStrutsプロジェクトの構造です。

\Web Pages
  form.jsp
  \WEB-INF
    \Content
      error.jsp
      form.jsp
      success.jsp
\Source Packages
  \action
    MyAction.java

MyAction.java

package action;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.*;

public class MyAction extends ActionSupport {

  @Action(value = "foo", results = {
    @Result(name = "input", location = "form.jsp"),
    @Result(name = "success", location = "success.jsp"),
    @Result(name = "error", location = "error.jsp")
  })
  public String execute() throws Exception {
    if (user.length() == 1) {
      return "success";
    } else {
      return "error";
    }
  }


  private String user = "";

  public void validate() {
    if (user.length() == 0) {
      addFieldError("user", getText("user required"));
    }
  }

  public String getUser() {
    return user;
  }

  public void setUser(String user) {
    this.user = user;
  }
}

MyAction.java に新しいアクション メソッドを追加して、\Web Pages の下の form.jsp を削除しようとしました。

  @Action(value="bar", results = {
    @Result(name = "success", location = "form.jsp"),
  })
  public String another() {
    return "success";
  }

しかし、http に移動すると次のエラーが発生しました: //localhost .../bar.action

HTTP ステータス 404 - アクション action.MyAction および結果入力に対して結果が定義されていません

4

1 に答える 1

1

MyAction には validate() が実装されています。これは、検証に対応していることを意味します。

何が起こっているかというと、別のものを呼び出していますが、validate() が開始されています (インターセプター スタックにあるため)。検証が失敗しているため、別の定義されていない結果を INPUT に送信しています。

あなたがすべき

  1. 検証が必要ない場合は、別のメソッドに @SkipValidation を追加します
  2. デフォルトの入力結果が必要な場合は、INPUT結果をanother()に追加します

より一般的な注意として、その種のエラー (アクション X と結果入力に対して結果が定義されていません) が発生した場合、通常は検証エラー、パラメーター設定エラー (例: 準備可能な例外) があることを意味します。

于 2012-07-25T09:15:30.900 に答える