【Java EE (Struts2 + Spring + Hibernate)开发】:Struts2(二)之【类型转换】

网友投稿 242 2022-12-01

【Java EE (Struts2 + Spring + Hibernate)开发】:Struts2(二)之【类型转换】

【Java EE (Struts2 + Spring + Hibernate)开发】: Struts2(二)之【类型转换】 ​

1 详解 Struts 2 的类型转换

1-1 Struts 2 内建的类型转换器

1-2 基于 OGNL 的类型转换

public class LoginAction implements Action //User类型属性封装请求参数 private User user; private String tip; //user属性的setter和getter方法 public void setUser(User user) { this.user = user; } public User getUser() { return this.user; } //tip属性的setter和getter方法 public void setTip(String tip) { this.tip = tip; } public String getTip() { return this.tip; } public String execute() throws Exception { //通过user属性的name属性和pass属性来判断控制逻辑 if (getUser().getName().equals("crazyit.org") && getUser().getPass().equals("leegang") ) { setTip("登录成功"); return SUCCESS; } else { setTip("登录失败!!"); return

直接封装成Map

public class LoginAction implements Action //Action类里包含一个Map类型的参数 //Map的value类型为User类型 private Map users; private String tip; //users属性的setter和getter方法 public void setUsers(Map users) { this.users = users; } public Map getUsers() { return this.users; } //tip属性的setter和getter方法 public void setTip(String tip) { this.tip = tip; } public String getTip() { return this.tip; } public String execute() throws Exception { //在控制台输出Struts 2封装产生的List对象 System.out.println(getUsers()); //根据Map集合中key为one的User实例来决定控制逻辑 if (getUsers().get("one").getName().equals("crazyit.org") && getUsers().get("one").getPass().equals("leegang") ) { setTip("登录成功!"); return SUCCESS; } else { setTip("登录失败!!"); return

直接封装成List

1-3 指定集合元素的类型

Struts 2 允许开发者通过局部类型文件来指定集合元素的类型。类型转换文件就是一个普通的 Properties (*.properties) 文件,里面包含了类型转换的相关配置信息。

public class LoginAction implements Action //Action类里包含一个List类型的参数 //List集合元素为User类型 private List users; private String tip; //users属性的setter和getter方法 public void setUsers(List users) { this.users = users; } public List getUsers() { return this.users; } //tip属性的setter和getter方法 public void setTip(String tip) { this.tip = tip; } public String getTip() { return this.tip; } public String execute() throws Exception { //在控制台输出Struts 2封装产生的List对象 System.out.println(getUsers()); //因为没有使用泛型,所以要进行强制类型转换 User firstUser = (User)getUsers().get(0); //users属性的第一个User实例来决定控制逻辑 if (firstUser.getName().equals("crazyit.org") && firstUser.getPass().equals("leegang") ) { setTip("登录成功!"); return SUCCESS; } else { setTip("登录失败!!"); return

局部类型转换文件 LoginAction-conversion.properties

Element_users=org.crazyit.app.domain.User

局部类型转换文件文件名应该为 ActionName-conversion.properties。

List 类型

Element_=

Map 类型

Key_=Element_=

1-4 自定义类型转换器

public class LoginAction implements Action private User user; private String tip; //user属性的setter和getter方法 public void setUser(User user) { this.user = user; } public User getUser() { return this.user; } //tip属性的setter和getter方法 public void setTip(String tip) { this.tip = tip; } public String getTip() { return this.tip; } public String execute() throws Exception { if (getUser().getName().equals("crazyit.org") && getUser().getPass().equals("leegang") ) { setTip("登录成功!"); return SUCCESS; } else { setTip("登录失败!!"); return

public class UserConverter extends DefaultTypeConverter //类型转换器必须重写convertValue方法,该方法需要完成双向转换 public Object convertValue(Map context , Object value, Class toType) { //当需要将字符串向User类型转换时 if (toType == User.class ) { //系统的请求参数是一个字符串数组 String[] params = (String[])value; //创建一个User实例 User user = new User(); //只处理请求参数数组第一个数组元素, //并将该字符串以英文逗号分割成两个字符串 String[] userValues = params[0].split(","); //为User实例赋值 user.setName(userValues[0]); user.setPass(userValues[1]); //返回转换来的User实例 return user; } else if (toType == String.class ) { //将需要转换的值强制类型转换为User实例 User user = (User) value; return "<" + user.getName() + "," + user.getPass() + ">"; } return null

1-5 注册类型转换器

1-6 基于 Struts 2 的自定义类型转换器

public class UserConverter extends StrutsTypeConverter //实现将字符串类型转换成复合类型的方法 public Object convertFromString(Map context , String[] values , Class toClass) { //创建一个User实例 User user = new User(); //只处理请求参数数组第一个数组元素, //并将该字符串以英文逗号分割成两个字符串 String[] userValues = values[0].split(","); //为User实例赋值 user.setName(userValues[0]); user.setPass(userValues[1]); //返回转换来的User实例 return user; } //实现将复合类型转换成字符串类型的方法 public String convertToString(Map context, Object o) { //将需要转换的值强制类型转换为User实例 User user = (User) o; return "<" + user.getName() + "," + user.getPass() + ">"; }}

1-7 处理 Set 集合

public class LoginAction extends ActionSupport private Set users; private Date birth; //user属性的setter和getter方法 public void setUsers(Set users) { this.users = users; } public Set getUsers() { return this.users; } //birth属性的setter和getter方法 public void setBirth(Date birth) { this.birth = birth; } public Date getBirth() { return this.birth; } //没有提供execute()方法, //将直接使用ActionSupport的execute()方法

public class UserConverter extends StrutsTypeConverter public Object convertFromString(Map context , String[] values, Class toClass) { Set result = new HashSet(); for (int i = 0; i < values.length ; i++ ) { //创建一个User实例 User user = new User(); //只处理请求参数数组第一个数组元素, //并将该字符串以英文逗号分割成两个字符串 String[] userValues = values[i].split(","); //为User实例的属性赋值 user.setName(userValues[0]); user.setPass(userValues[1]); //将User实例添加到Set集合中 result.add(user); } return result; } public String convertToString(Map context, Object o) { //如果待转换对象的类型是Set if (o.getClass() == Set.class) { Set users = (Set)o; String result = "["; for (Object obj : users ) { User user = (User)obj; result += "<" + user.getName() + "," + user.getPass() + ">"; } return result + "]"; } else { return ""; } }}

public class User{ private String name; private String pass; //name属性的setter和getter方法 public void setName(String name) { this.name = name; } public String getName() { return this.name; } //pass属性的setter和getter方法 public void setPass(String pass) { this.pass = pass; } public String getPass() { return this.pass; } public boolean equals(Object obj) { //待比较的两个对象是同一个对象,直接返回true if(this == obj) { return true; } //只有当obj是User对象 if (obj != null && obj.getClass() == User.class) { User user = (User)obj; //两个对象的name属性相等即认为二者相等。 if (this.getName().equals(user.getName())) { return true; } } return false; } //根据name属性来计算hashCode。 public int hashCode() { return

1-8 类型转换中的错误处理

public class LoginAction extends ActionSupport private User user; private String tip; //user属性的setter和getter方法 public void setUser(User user) { this.user = user; } public User getUser() { return this.user; } //tip属性的setter和getter方法 public void setTip(String tip) { this.tip = tip; } public String getTip() { return this.tip; } public String execute() throws Exception { if (getUser().getName().equals("crazyit.org") && getUser().getPass().equals("leegang") ) { setTip("登录成功!"); return SUCCESS; } else { setTip("登录失败!!"); return

/input.jsp /welcome.jsp /welcome.jsp .

public class LoginAction extends ActionSupport private User user; //user属性的setter和getter方法 public void setUser(User user) { this.user = user; } public User getUser() { return user; } //没有execute方法,直接使用ActionSupport的execute方法

public class LoginAction extends ActionSupport private List users; //users属性的setter和getter方法 public void setUsers(List users) { this.users = users; } public List getUsers() { return

类型转换的错误处理

2 使用 Struts 2 的输入校验

2-1 编写校验规则文件

2-2 国际化提示信息

2-3 使用客户端校验

2-4 字段校验器配置风格

2-5 非字段校验器配置风格

2-6 短路校验器

2-7 校验文件的搜索规则

2-8 校验顺序和短路

2-9 内建校验器

2-10 基于 Annotation 的输入校验

2-11 手动完成输入校验

3 使用 Struts 2 控制文件上传

3-1 Struts 2 的文件上传

3-2 实现文件上传的 Action

3-3 配置文件上传的 Action

3-4 手动实现文件过滤

3-5 拦截器实现文件过滤

3-6 输出错误提示

3-7 文件上传的常量配置

4 使用 Struts 2 控制文件下载

4-1 实现文件下载的 Action

4-2 配置 Action

4-3 下载前的授权控制

5 详解 Struts 2 的拦截器机制

5-1 拦截器在 Struts 2 中的作用

5-2 Struts 2 内建的拦截器

5-3 配置拦截器

5-4 使用拦截器

5-5 配置默认拦截器

5-6 实现拦截器类

5-7 使用拦截器

5-8 拦截方法的拦截器

5-9 拦截器的执行顺序

5-10 拦截结果的监听器

5-11 覆盖拦截器栈里特定拦截器的参数

5-12 使用拦截器完成权限控制

6 使用 Struts 2 的 Ajax 支持

6-1 使用 stream 类型的 Result 实现 Ajax

6-2 JSON 的基础知识

6-3 实现 Action 逻辑

6-4 JSON 插件与 json 类型的 Result

6-5 实现 JSP 页面

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:我劝你谨慎使用Spring中的@Scheduled注解
下一篇:Python装饰器记录函数被调用次数和最大值
相关文章

 发表评论

暂时没有评论,来抢沙发吧~