Struts处理集合中的类型转换

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">的结果视图。并提示结果信息




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值