思想:页面上name属性的值和action中属性的名称一致,类型是不一样,转化器的目的就是把页面上的字符串转化成action中需要的。比如将checkbox的值转换为list;将一个字符串转换为一个bean!
转化器的步骤:
1、在action中的属性中,出现要最终转化后的类型,属性的名要和jsp页面的name属性相同!
2、写一个转化类 继承了StrutsTypeConverter
//把页面上传递过来的数据转化成需要的数据类型
//values为要转化的值,返回值为最终的类型
public Object convertFromString(Map context, String[] values, Class toClass) {
//写转化逻辑
}
3、在classpath根目录(src根目录)下创建一个文件,该文件的名字是固定的xwork-conversion.properties
key值为最终要转化成的类型,value值为转化器
1、在action中的属性中,出现要最终转化后的类型,属性的名要和jsp页面的name属性相同!
2、写一个转化类 继承了StrutsTypeConverter
//把页面上传递过来的数据转化成需要的数据类型
//values为要转化的值,返回值为最终的类型
public Object convertFromString(Map context, String[] values, Class toClass) {
//写转化逻辑
}
3、在classpath根目录(src根目录)下创建一个文件,该文件的名字是固定的xwork-conversion.properties
key值为最终要转化成的类型,value值为转化器
例子一:将一个字符串转换为bean:
(1).jsp页面提供输入表单:
<%@
page language="java" import= "java.util.*" pageEncoding="UTF-8" %>
<%@
taglib uri="/struts-tags" prefix= "s"%>
<!
DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<
html
>
<body >
<s:form action="../converterAction_showUser.action" >
用户名和密码:
<s:textfield name="user" ></s:textfield>
<s:submit></ s:submit>
</s:form>
</body >
</
html
>
|
(2).Action中User bean属性user:(需要提供get/set方法)
public
class ConverterAction extends ActionSupport{
private
User user;
public
User getUser() {
return user ;
}
public
void setUser(User user) {
this.user = user;
}
public
String showUser(){
System.
out.println(this .user .getPassword());
System.
out.println(this .user .getUsername());
return "" ;
}
}
|
(3).UserConverter:实现将字符串转换为user对象的逻辑!
public
class UserConverter extends StrutsTypeConverter{
/**
* 从页面到action
*/
@Override
public
Object convertFromString( Map context, String[] values, Class toClass) {
String[] ss = values[0].split(
",");
User user =
new User();
user.setPassword(ss[1]);
user.setUsername(ss[0]);
return user;
}
/**
* 从action到页面
*/
@Override
public
String convertToString( Map context, Object o) {
return null ;
}
}
|
(4).配置文件配置要转换的类型与转换器的对应关系:
xwork-conversion.properties:
cn.itheima03.struts2.bean.User=
cn.itheima03.struts2.converter.action.UserConverter
|
例子二:将checkbox提交的多个数据转换为list!
(1).jsp:
<%@
page language="java" import= "java.util.*" pageEncoding="UTF-8" %>
<%@
taglib uri="/struts-tags" prefix= "s"%>
<!
DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<
html
>
<body >
<s:form action="../converterAction_aihaoss.action" >
<s:checkboxlist list="{'aa','bb','cc','dd'}" name="aihaos" ></s:checkboxlist>
<s:submit></ s:submit>
</s:form>
</body >
</
html
>
|
(2)Action:注意name属性和Action中的field保持一致!
public
class ConverterAction extends ActionSupport{
private
List<String> aihaos;
public
List<String> getAihaos() {
return aihaos ;
}
public
void setAihaos(List<String> aihaos) {
this.aihaos = aihaos;
}
public
String aihaoss(){
for(String s:aihaos ){
System.
out.println(s);
}
return "" ;
}
}
|
(3)Converter:
public
class ListConverter extends StrutsTypeConverter{
@Override
public
Object convertFromString( Map context, String[] values, Class toClass) {
List<String> aihaos =
new ArrayList<String>();
for(String s:values){
aihaos.add(s);
}
return aihaos;
}
@Override
public
String convertToString( Map context, Object o) {
return null ;
}
}
|
(4)xwork-conversion.properties:
java.util.List=
cn.itheima03.struts2.converter.action.ListConverter
|