? 在Web开发中,可能遇到这样两个场景:
? 1:文本框中提交一个字符串,用","分割开来,每一个被分割的内容代表java bean的一个属性,现在需要将该文本中的字符串传到后台,进行处理后将该bean类保存起来
? 2:在页面上选择自己的爱好(多选),将选择的结果传到后台,而获取选择爱好的属性为list,现在需要分别将每个爱好保存起来
? 对于以上两个场景,虽然用jsp和servlet可以解决,但是代码不利于复用以及重构,现在用struts2框架提供的类型转化器进行转化。
? 对于场景一,处理步骤如下:
? (1)创建一个Jsp页面,提供表单信息:
?? <s:form action="converAction_testUserConverter">
???? 用户名和密码:<s:textfield name="user" ></s:textfield>
???? <s:submit value="提交"></s:submit>
?? </s:form>
? (2)创建一个java bean类User:
package day9.bean; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
?
? (3)写一个Action类ConvertAction,接收页面传来的数据:
?
package day9; import java.util.List; import com.opensymphony.xwork2.ActionSupport; import day9.bean.User; public class ConvertAction extends ActionSupport{ //变量名user必须与form表单中的name相同,才能进行类型驱动 private User user; //测试类型转化,输出类的属性信息 public String testUserConverter(){ System.out.println(user.getUsername()); System.out.println(user.getPassword()); return "index"; } public String testListConverter(){ ?? for(String temp:aihaos){? ??? System.out.println(temp); ?? } ?? return "index"; ? } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public List<String> getAihaos() { return aihaos; } public void setAihaos(List<String> aihaos) { this.aihaos = aihaos; } } ??
? (4)编写一个转化器类UserConverter,需要继承类StrutsTypeConverter,并重写父类的convertFromString方法和convertToString方法:
?
package day9; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import day9.bean.User; public class UserConverter extends StrutsTypeConverter{ /*从页面到action的转化*/ @Override public Object convertFromString(Map context, String[] values, Class toClass) { String[] temp = values[0].split(","); User user = new User(); user.setUsername(temp[0]); user.setPassword(temp[1]); return user; } @Override public String convertToString(Map context, Object o) { // TODO Auto-generated method stub return null; } }
?? (5)编写配置文件struts-converter.xml,并在主配置文件中struts.xml文件中导入:
??
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="converter" namespace="/" extends="struts-default"> <action name="converAction_*" method="{1}" class="day9.ConvertAction"> <result name="index">index.jsp</result> </action> </package> </struts>
?? (5)最后需要在src目录下写一个xwork-conversion.properties配置文件,需要告知struts内核,你要用什么类型转换器来转成你想要的什么类型。
? ?配置需求: key值为转化后的类型,value值为转化器
?? 我是这样配置的:day9.bean.User=day9.UserConverter
??
?? 至于场景二,可以用场景一相似的方法进行转化,最后的配置文件格式为? :??java.util.List=day9.ListConverter
?
?? 通过以上设置,可以很easy地得到username和password的值,关于类型转化器大概就写到这里吧~
???
原文:http://610214577.iteye.com/blog/2219475