继续我的struts2学习之旅、、、、、
在struts2里面,对于8个原生数据类型和String、date等常用的数据类型,struts2自带了类型转换器,会自动转换。
今天我要记录的是对于自定义的类型,要如何进行类型转换。
首先我们要明白的是,对于页面的数据类型都是String的,但是对于后台处理的时候,就会分成不同的类型了,所以我们的数据从页面到后台的处理需要先经过类型转换,后台数据显示的时候也要先转换成String类型。这是背景!!!
好吧,把这个过程跟着回忆走一遍吧、、、、
1、页面有请求,就会去到Struts.xml(中间的web.xml我就不罗嗦了)
2、在Struts2.xml里,它会找到相对应的action,然后根据class的指示,就会找到对应存放action的package,在这个package里面要new一个file属性文件,里面的内容很简单:user=com.xin.converter.UserConverter(回头再解释)。
3、如果是使用内建的类型转换器的话,这时候就应该是去写action了。但是由于我们是使用自定义类型,所以我们要先做一下类型转换。
new一个package叫做com.xin.converter。然后我们在里面new一个UserConverter.java.(converter是转换器的意思)。这个页面就是完成类型转换功能的。(具体稍后解释)
4、当转换器写好之后,我们就可以去些action页面了,new一个class去完成action的工作,就叫userAction吧,然后根据这里的return的value我们就知道要返回对应struts.xml的哪一个result了
5、在struts.xml里根据result指示的路径,跳转到相应的页面(记为output.jsp)
6、在这里我们会设置一个标签,根据标签指示跳转到 转换器里面,把需要显示的信息转换成String类型。
大概的步骤就是这样,写的有点乱、、、
以下是分析一些本人认为重点的东西!!!
1、属性文件
这是放在action哪个package下的一个属性文件,属性名是由需要进行属性转换的action名和conversion.properties组成,例如:UserAction-conversion.properties。编译器根据属性文件的名字就知道哪个action是需要进行类型装换的。
对于自定义的的类型转换器有3个需要提供的信息,action的名字,action中待转换的属性名已经该属性对应的类型转换器。其中action的名字是通过属性文件名获得的,然后action待转换的属性名是key指定的,他说对应的转换器就有value指定。所以整个文件的类容很少,只是user=com.xin.converter.UserConverter(有多少要转换的属性就设置多少个key)。
2、类型转换器
贴出代码再分析:
import java.util.Map;
import java.util.StringTokenizer;
import ognl.DefaultTypeConverter;
import com.shengsiyuan.bean.User;
public class UserConverter extends DefaultTypeConverter
//继承的父类是默认的类型转换器,相当于一个抽象类,我们要做的 是把它实例化
{
@Override
public Object convertValue(Map context, Object value, Class toType)
{
if(User.class == toType) //从页面向后台对象转换
{
String[] str = (String[])value;//用字符串数组接收,没有用字符的,
String firstValue = str[0];
StringTokenizer st = new StringTokenizer(firstValue, ";");//以;为分割标记
String username = st.nextToken();
String password = st.nextToken();
User user = new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
else if(String.class == toType) //从后台对象向页面转换
{
User user = (User)value;
String username = user.getUsername();
String password = user.getPassword();
String userInfo = "username: " + username + ", password: " + password;
return userInfo;
}
return null;
}
}
算了,后面的转换器也不会怎么解释,能看懂得就看吧,看不懂就找视频看,我是看圣思园的教学视频的、、、、