Struts2中定义当类型转换器在执行类型转换过程中出现异常时,则系统的conversionError拦截器就会处理该异常,然后返回名为<result="input">的逻辑视图。
本例实现功能:通过Iterator迭代器创建三个输入框,同时对三个输入框进行类型转换。
一:前台表单:
<s:fielderror></s:fielderror> <s:form action="ognlLogin"> <s:iterator value="{0,1,2}" status="st"> <s:textfield name="user[%{#st.index}]" label="第%{#st.index}个用户信息"></s:textfield> </s:iterator> <tr> <s:submit value="转换"></s:submit> <s:reset value="重置"></s:reset> </tr> </s:form>
表单通过迭代器创建三个输入框,并分别给三个输入框name属性赋值user[0],user[1],user[2],说一下#st.index返回的是当前迭代器的索引,%的作用是当标志的属性为字符串类型时,计算OGNL表达式的值,这里就是将0,1,2分别赋值给user[]。
2:Action ognlAction
package com.mao; import java.util.List; import com.opensymphony.xwork2.ActionSupport; public class ognlAction extends ActionSupport{ private String tip; private List<User>user; public String getTip() { return tip; } public void setTip(String tip) { this.tip = tip; } public List<User> getUser() { return user; } public void setUser(List<User> user) { this.user = user; } }
Action中继承ActionSupport类,而且并没有重写execute()方法,所以调用的是父类ActionSupport类的方法。
3:user所对应的类 User:
package com.mao; public class User { private String name; private String pass; public User(){ } public User(String name, String pass) { this.name = name; this.pass = pass; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } }4:类型转换器:OgnlConverter
package com.mao; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; public class OgnlConverter extends StrutsTypeConverter{ @Override public Object convertFromString(Map context, String[] values, Class toClass) { // TODO Auto-generated method stub User user=new User(); String []param=values[0].split(","); user.setName(param[0]); user.setPass(param[1]); return user; } @Override public String convertToString(Map context, Object o) { // TODO Auto-generated method stub User user=(User) o; return "<"+user.getName()+user.getPass()+">"; } }实现功能:用户输入xxxx,xxx格式,程序将,前作为密码赋值给user.name,将,以后的字符串复制给user.pass。如果用户没有按照xxx,xxx的格式输入,则类型转换器转换失败, 则系统的conversionError拦截器就会处理该异常,然后返回名为<result="input">的逻辑视图。
5:struts.xml
<package name="abc" extends="struts-default"> <action name="*Login" class="com.mao.{1}Action"> <result name="input">/jspObject/ognlInput.jsp</result> <result name="success">/jspObject/welcom.jsp</result> <result name="error">/jspObject/error.jsp</result> </action> </package>6:注册全局类型转换器
com.mao.User=com.mao.OgnlConverter
代表需要转换的类型为User,实现类为OgnlConverter。
7:结果:
当任意一个类型转化失败都会返回<result name="input">的结果视图。并提示结果信息。