我正在使用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和结果输入
答案 0 :(得分:1)
你的MyAction有一个validate()实现,这意味着它可以识别验证。
发生的事情是你正在调用另一个,但是validate()正在进入(因为它在拦截器堆栈中)。验证失败,因此发送到INPUT结果,该结果未在另一个中定义。
你应该
更一般地说,当你得到那种错误(没有为动作X和结果输入定义结果)时,通常意味着你要么有验证错误,参数填充错误(例如:可预测的例外)。