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>
表单中<s:fielderror></s:fielderror>用于提示错误信息。
表单通过迭代器创建三个输入框,并分别给三个输入框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:注册全局类型转换器
在xwork-conversion.properties全局文件中添加如下代码:
com.mao.User=com.mao.OgnlConverter
代表需要转换的类型为User,实现类为OgnlConverter。
7:结果:
当任意一个类型转化失败都会返回<result name="input">的结果视图。并提示结果信息。