Struts2在一个类中有多个动作

时间:2012-07-19 03:35:34

标签: struts

我正在使用Struts2。我有两个具有相同代码的Web表单。我想删除一个表格。这是我的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 - 没有为操作动作定义结果.MyAction和结果输入

1 个答案:

答案 0 :(得分:1)

你的MyAction有一个validate()实现,这意味着它可以识别验证。

发生的事情是你正在调用另一个,但是validate()正在进入(因为它在拦截器堆栈中)。验证失败,因此发送到INPUT结果,该结果未在另一个中定义。

你应该

  1. 如果您不想在那里进行验证,请将@SkipValidation添加到另一个方法
  2. 如果您想要默认输入结果
  3. ,请将INPUT结果添加到另一个()

    更一般地说,当你得到那种错误(没有为动作X和结果输入定义结果)时,通常意味着你要么有验证错误,参数填充错误(例如:可预测的例外)。