我转换的目的是这样的,在客户端的一个文本输入框内输入用户名和密码,他们之间以用英文逗号隔开!
整个项目里面只用到了三个类,一个User类,用类封装用户信息;一个LoginAction,这个拦截用户请求,来实现页面的跳转;最后一个是TypeConverter,这个类是用来实现类型转换的 他们在包user下面!
代码是这样的
User类:
package user;
public class User {
private String name = "";
private String pwd = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
LoginAction类:
package user;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action{
private User user;
private String tip;
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception{
if(getUser().getName().equals("hello")&&getUser().getPwd().equals("java")){
setTip("登录成功");
return "success";
}else{
setTip("登录失败,类型转换失败");
return "error";
}
}
}
TypeConverter类:
package user;
import java.util.Map;
import ognl.DefaultTypeConverter;
public class TypeConverter extends DefaultTypeConverter{
public Object convertValue(Map context, Object value, Class toType){
//如果要把字符串转换成User类型
if(User.class==toType){
User user = new User();
String [] params = (String[]) value;
String[] userValues = params[0].split(",");
user.setName(userValues[0]);
user.setPwd(userValues[1]);
return user;
}
//如果要将复合类型转换成String类型
else if(String.class==toType){
User user = (User)value;
return "<"+user.getName()+","+user.getPwd()+">";
}
return null;
}
}
这就是后台的全部代码,还有一个属性配置文件,就不贴出来了!
刚开始我不知道前台传值的时候,那个文本框的name属性的值要对应那个值,这点我貌似有些笨了,当然是action里面的属性了!
刚开始的时候我就纳闷不知道是哪个,没有和后台对应上,结果总是出现空指针异常!细节一定要把握好!
在上面的代码中,action里面有一个User类的对象user,这个对象便成为了接受前台参数的action属性
在接受这个的同时需要类型转换器转换了,上面的类型转换器是基于OGNL的,有点麻烦!
转换器里面需要实现convertValue方法,里面有三个参数,一个是Map类型的,一个是Object类型的,一个是Class类型的!
第一个参数代表了转换器的上下文,第二个是接受前台传过来的值,第三个是要转换的目标类型!
至于第一个参数,我现在还不明白,我就不明白上下文是什么概念,知道的话,帮忙解答一下,谢谢了!!!!
在转换器类里面,流程是这样的,value是前台传过来的参数,或许要纳闷为什么数组类型的了!是这样的,假如前台要传过来一个多选的下拉列表的值,我们知道我们可以使用request.getValues(name)这个可以获得传过来的所有值,说到这里大概可以理解为什么用数组了吧,因为,request.getValues()方法的返回值类型是数组类型的,我们需要满足大多数的情况,所以struts2的发明者只用数组来接受参数!貌似很智能啊!
得到了前台的参数后,我们就可以通过String类的split方法,将这个字符长以英文逗号为分割点,来获取不同的数据!
前面已经说了项目要求了--输入用户名和密码,两者用英文逗号隔开!在user类里面已经写了user属性的setXXX方法!
将前台参数分割后就可以对user类型的属性进行赋值了!到此就结束了!我也只是懂个皮毛!不对的地方,一定指出来!我也是总结一下,加深一下印象!
分享到:
相关推荐
传智播客struts2.1源代码_自定义类型转换器
对于Struts1和Struts2中都讲到了自定义类型转换器。但是有些人可能对自定义类型转换器的运行原理不理解,这里进行简单介绍一下……
struts 2.0 自定义类型转换器 注册类型转换器 入门实例 简单实例
struts2 自定义类型转换器,实现一个对象转换成一个int 坐标值。
Struts2自定义类型转换器 如果用户登陆后,可以访问Action中的所有方法,如果用户没有登陆,不允许访问Action中的方法。并且提示你没有权限执行该操作!
类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行...下面这篇文章主要给大家介绍了关于Struts2学习教程之自定义类型转换器的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
myeclipse平台下使用struts2.3框架搭建实例,理解struts2工作原理,了解struts2自定义类型转换,自定义拦截器,掌握struts2的mvc框架应用
Struts 自定义转换器Struts 自定义转换器
对于基本数据类型 strus2可以自动的将其转换成所需要的类型,但是我们自己定义的引用数据类型无法转换,本文详细介绍了strus2的自定义类型转换器
(1) 编写一个自定义类型转换器,并基于应用程序进行全局配置,实现字符串参数与颜色值之间的转换,并将颜色值应用于视图当中。 (2) 根据实验四的图书管理系统,扩展图书新增功能,要求对新增页面表单中的每个...
Struts的自定义转换器 public class LineConvertor extends StrutsTypeConverter{...}
1、 理解Struts2的类型转换类型 2、 理解局部类型转换器与全局类型转换器的区别 3、 掌握Struts2的自定义类型转换 4、 理解OGNL表达式语言
自定义的struts时间转换器,轻松实现java中时间的转换。
测试源代码 博文链接:https://gyj129129.iteye.com/blog/225216
主要介绍了关于Struts2类型转换的相关资料,文中主要介绍了Struts2的类型转换器和自定义类型转换器的实现,有需要的朋友可以参考借鉴,下面来一起看看吧。
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 ...09 自定义拦截器 38 10 类型转换 38 Struts2总结 39
(2) 用户处于只有登录之后才可以讨论,聊天;如果没有登录只可以查看信息。 (3) 用户注册,需要通过Struts2字段校验判断用户注册页面中的用户名、密码、年龄、出生日期、邮箱等是否符合校验规则,并对自定义校验器...
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 ...09 自定义拦截器 38 10 类型转换 38 Struts2总结 39
服务器可以接收到的来自用户的数据只能是字符串或者是字符串数组,而在服务器上的对象中 ,这些数据往往有多种不同的类型,如日期(Date) 整数(int) 浮点数... 要实现 上述的转换 ,Struts2中 提供了 converter。