- Struts 2.x权威指南
- 李刚编著
- 580字
- 2022-07-20 11:11:58
4.4.1 系统需求
假设本系统有一个如图4.5所示的输入页面。
![](https://epubservercos.yuewen.com/1C94E6/3590582303459301/epubprivate/OEBPS/Images/figure_0136_0306.jpg?sign=1739420434-kvRcQhbeYXT8hUGRs1fZfcumjrJmfkJK-0-e417cb60fc1ea364e21afc142d8619d1)
图4.5 输入字符串的页面
上面的JSP页面可以输入一个abc,xyz模式的字符串,其中abc将作为用户的用户名,而xyz 将作为用户的密码。当单击“转换”按钮时,系统希望可以将上面的字符串转换成一个User实例。
虽然可以在Action中分别接收name参数和pass参数,然后将这两个参数设置成User实例的属性。但这种处理方式是手动进行类型转换的,显然编程会复杂,我们希望使用一个类型转换器来自动实现类型转换。
如果可以让类型转换器来实现自动类型转换,我们就可以在Action中直接使用User类型的属性。看下面的Action类代码。
程序清单:codes\04\4.4\LocalConverter\WEB-INF\src\org\crazyit\struts2\action\LoginAction.java
public class LoginAction implements Action { // 封装请求参数的Map对象 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方法 ... // 处理用户请求的execute方法 public String execute() throws Exception { // 调用user属性的name、pass进行判断 if (getUser().getName().equals("crazyit") && getUser().getPass().equals("leegang")) { setTip("登录成功"); return SUCCESS; } else { setTip("登录失败"); return ERROR; } } }
上面的Action类提供了一个User类型的属性,User类是一个用户自定义的类,该类包含两个字符串属性。下面是User类的代码。
程序清单:codes\04\4.4\LocalConverter\WEB-INF\src\org\crazyit\struts2\domain\User.java
// 用户自定义类 public class User { // User类包含的两个字符串属性 private String name; private String pass; // 下面是User类的两个基本属性的setter和getter方法 public void setName(String name) { this.name = name; } public void setPass(String pass) { this.pass = pass; } public String getName() { return (this.name); } public String getPass() { return (this.pass); } }
很显然,用户不可能直接输入一个User实例,如果定义一个自定义类型转换器,由自定义类型转换器负责将字符串参数转换成User实例,这个例子就可以正常运行起来。