转换器
应用场景:输出界面/输出界面 与 对象/数据库不是一一对应的关系。或者格式不一样。
例如:输入身份证号,自动解析出生日或其它信息。
要实现一个拦截器总共需要做以下几步:
1.:做转换器的类。 --- 继承StrutsTypeConverter.
2.:配置。
第一种:全局配置。在src根下,建立xwork-conversion.properties文件。配置好实体类与转换类的二者完全限定名对应关系。(指定当遇到那一个实体类,就找到相应的转换类)
第二种:局部配置。在action的包里面,建立Action类名-conversion.properties文件(StudentAction-conversion.properties)。
配置好成员变量与转换类的对应关系。stu=com.itnba.maya.util.StudentConverter。(指定当遇到这个对象时,就找到相应的转换类)
(2者选其一即可)
示例:
实体类
package com.maya.convert; public class User { private String name; private String card; private String birthday; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCard() { return card; } public void setCard(String card) { this.card = card; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } }
struts.xml配置
<package name="convert" namespace="/convert" extends="struts-default"> <action name="*_*" class="com.maya.convert.{1}Action" method="{2}"> <result>{1}_{2}.jsp</result> </action> <action name="Convert_insert" class="com.maya.convert.ConvertAction" method="insert"> <result type="chain">Convert_findAll</result> </action> </package>
ActionSupport
package com.maya.convert; import com.opensymphony.xwork2.ActionSupport; public class ConvertAction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String add(){ return SUCCESS; } public String insert(){ return SUCCESS; } public String findAll(){ return SUCCESS; } }
JSP页面
转换器的类
package com.maya.convert; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; public class UserConvert extends StrutsTypeConverter { //对应题目,我们是要解析用户输入的身份证号,所以用convertFromString()这个个方法就可以了 @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) {//一般我们只用中间的String[] // 将接收到的字符串转换成对象输出出去(页面向数据库进行操作,但与数据库不匹配时) String s=arg1[0]; String year=s.substring(6, 10); String mounth=s.substring(10,12); String day=s.substring(12,14); User user=new User(); user.setCard(s); user.setBirthday(year+"年"+mounth+"月"+day+"日"); return user; } @Override public String convertToString(Map arg0, Object arg1) {//一般只用Object // 将接收到的对象已字符串的形式输出出去(数据库月页面显示不匹配时) return null; } }
全局配置:
com.maya.convert.User=com.maya.convert.UserConvert
局部配置:
user=com.maya.convert.UserConvert