struts2的处理流程
用户请求→struts2框架→控制器→struts2框架→视图资源
<result>/success.jsp</result>
当result中的name值默认为success。
INPUT action的执行需要前端获得参数,INPUT代表这个参数传递的页面,对一些参数进行验证,验证不通过时,返回INPUT页面。
验证第一种情况,参数的类型错误。这是一个user类
public class User {
private String username;
private String password;
private List<User> userlist;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<User> getUserlist() {
return userlist;
}
public void setUserlist(List<User> userlist) {
this.userlist = userlist;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
下面是对user的登入页面
<body>
<form action="LoginAction.action" method="post">
姓名:<input type="text" name="username"><s:fielderror name="username"></s:fielderror>
密码:<input type="password" name="password">
姓名1:<input type="text" name="userlist[0].username">
姓名2:<input type="text" name="userlist[1].username">
姓名3:<input type="text" name="userlist[2].username">
年龄:<input type="text" name="age">
<input type="submit" value="登入">
</form>
</body>
当我们在年龄处输入abc,发现页面发生跳转,依旧跳转到login页面视图。此时当我们查询路径时发现已经是loginaction.action,说明在此处input起了作用隔绝了不符合常规的字符。
第二种我们自定义拦截的规则
jsp页面不变,下面对loginaction.action的修改
public class LoginAction extends ActionSupport implements ModelDriven<User>{
private User user=new User();//使用ModelDriven时必须初始化实例对象
public String login(){
//this.addFieldError(fieldName, errorMessage);当fielname不为空时,返回input
/*if(user.getUsername()==null||"".equals(user.getUsername())){
this.addFieldError("username", "用户名不能为空");
return INPUT;
}*/
// 此处和下面validate()方法重复只需留一个
System.out.println(user.getUsername());
System.out.println(user.getUserlist().get(0).getUsername());
System.out.println(user.getUserlist().get(1).getUsername());
System.out.println(user.getUserlist().get(2).getUsername());
return SUCCESS;
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
@Override
public void validate() {
if(user.getUsername()==null||"".equals(user.getUsername())){
this.addFieldError("username", "用户名不能为空");
}
}
}
我们对第一个姓名加上自定义限制让它不能为空,为空时跳转input页面。
<result/>标签分局部和全部结果。
局部结果:作为<action/>的一个结果
全部结果:以下
<package name=" ">
<global-results>
<result name=" ">...</result>
</global-results>
</package>
param属性:
<result name="add">
<param name="location">/${#request.path}.jsp</param>
</result>
result中的type属性
比较重要的几个类型:
dispatcher —— 请求转发到一个页面 (默认),不可以用这种方式转发到一个action
chain —— 一个action请求转发至另一个 action
redirect —— 响应重定向到一个页面
redirectAction —— 一个action响应重定向至另一个 action
stream —— 文件下载