Struts学习笔记 第11页 共39页
} public int getAge() { } public void setAge(int age) { } }
//Action类 public class UserAction extends ActionSupport { private User user; //private UserDTO userDTO; public String add() { } public User getUser() { } public void setUser(User user) { } } 3、 ModelDriven接收参数
return age; this.age = age; System.out.println(\ + user.getName()); System.out.println(\ + user.getAge()); return SUCCESS; return user; this.user = user; 使Action实现com.opensymphony.xwork2.ModelDriven
参数被传入至Action后,会被ModelDriven对象根据参数名自动赋值给User对象相应的属性而生成User对象,并且由getModel()返回。那么我们在Action中就可以利用这个对象了。
注意:传入的参数名需要与对象模型中的成员属性一致。 对象模型User:
public class User { private String name; private int age; public String getName() { } public void setName(String name) { } public int getAge() { this.name = name; return name; Struts学习笔记 第12页 共39页
}
} return age; public void setAge(int age) { } this.age = age; Action对象
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDriven
如果表单提交数据中有中文时,尽量使用post方式。 需要在Struts.xml配置文件中加入一个常量配置,如下:
System.out.println(\ + user.getName()); System.out.println(\ + user.getAge()); return SUCCESS;
使用addFieldError方法和s:fieldError标签简单处理数据校验 场景:对一个用户名进行验证,如果用户名不合法,则显示给客户端查看信息。 URL请求地址: http://localhost:8080/Struts2_1100_SimpleDataValiation/user/user!add?name=a 分析:访问的Struts2配置,namespace=”/user” action的name=”user” Action所执行的方法method=”add”并且传入了一个参数name=a.如下:
根据配置文件可以得知action所对应的类为com.bjsxt.struts2.user.action.UserAction,并且具有两个结果集(success和error).代码如下: import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { } 根据Action类代码,可以看到Action是利用Action的成员属性(name)来接受参数值,并且使用this.addFieldError()方法添加错误信息,以便前台可以访问到。 private String name; public String add() { } public String getName() { } public void setName(String name) { } this.name = name; return name; if(name == null || !name.equals(\)) { } return SUCCESS; //addFieldError 添加错误信息,可以在客户端访问到。 this.addFieldError(\, \); this.addFieldError(\, \); return ERROR; this.addFieldError(name, errorMessage); 注:此方法是使用继承了ActionSupport父类的 name:可以是傻的属性名称,但一般建议使用哪个成员属性出题了,就用那个。当前是因为name没有通过验证,所以使用name errorMessage:添加的信息 在客户端获取这些信息,如下:
User Add Error!- name is error name is too long Class=”errorMessage”是Struts2已经设置好的一个css了。这个方式不方便我们自定义样式。
Struts学习笔记 第14页 共39页
2、
取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:
1. 前三者:依赖于容器 2. 前三者:IOC (只用这种) 3. 后三者:依赖于容器 4. 后三者:IOC
一、 方法一:ActionContext方式
Struts学习笔记 第15页 共39页
一般在Action类的构造方法、或execute()方法中获取。
public class LoginAction1 extends ActionSupport { } 然后在Jsp页面中获取相关web元素。
User Login Success!private Map request; private Map session; private Map application; public LoginAction1() { } public String execute() { } request.put(\, \); session.put(\, \); application.put(\, \); return SUCCESS; request = (Map)ActionContext.getContext().get(\); session = ActionContext.getContext().getSession(); application = ActionContext.getContext().getApplication(); 注:因为request、session、application对象Struts2将在放入到Action Context中, 因此需要使用#key来访问对象们。 后面的是java脚本代码的访问方式。 二、 方式二:Ioc(控制反转)—推荐使用
让Action类实现RequestAware、SessionAware、ApplicationAware接口,然后重写他们的set方法(setRequest、setSession、setApplication),通过依赖注入、控制反转(原来自己控制,现在由别人来控制值。) import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware;