Struts2学习笔记
******类型转换:******
一.在JSP页面定义一个表单,输入将来要在服务器转化为自定义类的数据。
二.局部的类型转换:
在PojoAction.java类里创建一个或多个自定义的类变量。并生成get,set方法。
在PojoAction.java类里Struts2执行execute()方法时会跟据JSP页面表单里的name="XXX"属性去匹配PojoAction.java类里的get,set方法后的名字来给相应的属性赋值。如:name="username",匹配:setUsername(String username) or getUsername()方法。注:在调用set,get方法之前Struts2会去执行类型转换。类型转换时Struts2会去匹配有没有息定义的类型转换器。单个类型转换时需要三个文件:PojoAction.java类、PojoAction-conversion.preporties文件(1.命名要像这样。2.要与PojoAction.java类在同一个包内。3.内容XXX=com.XXX.XXX.PojoConverter类型转换器名)、PojoConverter.java类型转换器。
PojoConverter.java类型转换器的编写:可以继承DefaultTypeConverter这个类。@override重写public Object ConvertValue(Map context, Object value, Class toType){}这个方法。其中有简化的三个参数,其意分别为:Map context:应用的上下文。Object value:得到的request.getParameters的一个数组。Class toType:数据类型,是将要转换成什么类型。一般有两种情况:1.从if(String.class == toString}; 2.从if(Object.class == toType){};
在JSP里Struts标签里输出<s:property value="object"/>
三.全局性的类型转换:对单前系统符合要求的进行类型转换。
*.src目录会映射到WEB-INF下classes目录下。
在SRC目录下建立xwork-conversion.properties文件。写法如:com.xxx.Object(自定义类型)=com.XXX.XXX.PojoConverter类型转换器名。
*.在属性文件里注释用#号。
四.Struts2内置的精简化类型转换器:StrutsTypeConverter(抽象)
StrutsTypeConverter继承了DefaultTypeConverter类。内置方法有:1.convertFromString(Map context, String[] values, Class toClass)返回Object,从字符串换化为对象;2.converToString(Map context, Object o)返回String从对象换化为字符串;*.只要重写这两个方法就OK了。
五.如果有多个同样的自定义类型对象。
1.可以把它们放到集合里,如:List<Object> listObj;并生成get,set方法。一定要用泛型要不然还要写配置。
2.把JSP里struts标签改成<s:textfield name="object">;name同名。反回的pemeter就是一个数组了。
3.把converter类里写转换成List对象。
六. 在JSPJSP里struts标签里可以给bean类的属性直接赋值:如:
<s:textfield name="object.xxx1" label="xxx1">
<s:textfield name="object.xxx2" label="xxx2">
...
"object"会直接找到PojoAction.java类里相对应的属性。注:bean类要提供没有参数的构造方法。struts用到反射的功能。
*.六这种方法不建议使用。还是要用类型转换来写比较好。
******类型转换:******
一.在JSP页面定义一个表单,输入将来要在服务器转化为自定义类的数据。
二.局部的类型转换:
在PojoAction.java类里创建一个或多个自定义的类变量。并生成get,set方法。
在PojoAction.java类里Struts2执行execute()方法时会跟据JSP页面表单里的name="XXX"属性去匹配PojoAction.java类里的get,set方法后的名字来给相应的属性赋值。如:name="username",匹配:setUsername(String username) or getUsername()方法。注:在调用set,get方法之前Struts2会去执行类型转换。类型转换时Struts2会去匹配有没有息定义的类型转换器。单个类型转换时需要三个文件:PojoAction.java类、PojoAction-conversion.preporties文件(1.命名要像这样。2.要与PojoAction.java类在同一个包内。3.内容XXX=com.XXX.XXX.PojoConverter类型转换器名)、PojoConverter.java类型转换器。
PojoConverter.java类型转换器的编写:可以继承DefaultTypeConverter这个类。@override重写public Object ConvertValue(Map context, Object value, Class toType){}这个方法。其中有简化的三个参数,其意分别为:Map context:应用的上下文。Object value:得到的request.getParameters的一个数组。Class toType:数据类型,是将要转换成什么类型。一般有两种情况:1.从if(String.class == toString}; 2.从if(Object.class == toType){};
在JSP里Struts标签里输出<s:property value="object"/>
三.全局性的类型转换:对单前系统符合要求的进行类型转换。
*.src目录会映射到WEB-INF下classes目录下。
在SRC目录下建立xwork-conversion.properties文件。写法如:com.xxx.Object(自定义类型)=com.XXX.XXX.PojoConverter类型转换器名。
*.在属性文件里注释用#号。
四.Struts2内置的精简化类型转换器:StrutsTypeConverter(抽象)
StrutsTypeConverter继承了DefaultTypeConverter类。内置方法有:1.convertFromString(Map context, String[] values, Class toClass)返回Object,从字符串换化为对象;2.converToString(Map context, Object o)返回String从对象换化为字符串;*.只要重写这两个方法就OK了。
五.如果有多个同样的自定义类型对象。
1.可以把它们放到集合里,如:List<Object> listObj;并生成get,set方法。一定要用泛型要不然还要写配置。
2.把JSP里struts标签改成<s:textfield name="object">;name同名。反回的pemeter就是一个数组了。
3.把converter类里写转换成List对象。
六. 在JSPJSP里struts标签里可以给bean类的属性直接赋值:如:
<s:textfield name="object.xxx1" label="xxx1">
<s:textfield name="object.xxx2" label="xxx2">
...
"object"会直接找到PojoAction.java类里相对应的属性。注:bean类要提供没有参数的构造方法。struts用到反射的功能。
*.六这种方法不建议使用。还是要用类型转换来写比较好。