Struts2的类型转换及输入校验(自定义类型转换器)

来源:互联网 发布:javascript 转为java 编辑:程序博客网 时间:2024/06/11 22:35

typeconverter2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>自定义类型转换器</title>
</head>
<body>
  <s:form action="typeconverter" method="post">
  <s:textfield name="tel" label="请输入电话号码"></s:textfield>
  <s:submit value="提交"></s:submit>
  </s:form>
  </body>
</html>

action类:

package org.action;
import org.model.Tel;
import com.opensymphony.xwork2.ActionSupport;
public class MyTypeConverterAction extends ActionSupport{
private Tel tel;
public String execute() throws Exception{
System.out.println("执行MyTypeConverterAction");
return SUCCESS;
}
public Tel getTel() {
return tel;
}
public void setTel(Tel tel) {
this.tel = tel;
}
}

Tel.java

package org.model;
public class Tel {
private String sectionNo;
private String telNo;
public String getSectionNo() {
return sectionNo;
}
public void setSectionNo(String sectionNo) {
this.sectionNo = sectionNo;
}
public String getTelNo() {
return telNo;
}
public void setTelNo(String telNo) {
this.telNo = telNo;
}
}

MyTypeConverter

package org.converter;
import java.util.Map;
import org.model.Tel;
import ognl.DefaultTypeConverter;
public class MyTypeConverter extends DefaultTypeConverter{
public Object convertValue(Map context,Object value,Class toType){
//如果是从字符串向Tel类型转换
if(toType==Tel.class){
//把参数value转换为字符串数组
String[] str=(String[])value;
Tel t=new Tel();
//把传的字符串循环按“-”分割
for (int i = 0; i < str.length; i++) {
if(str[i].indexOf("-")>0){
//取出字符串数组中第一个值,然后按“-”分割得到字符串数组
String[] tels=str[0].split("-");
//分别把得来的值赋予Tel的属性
t.setSectionNo(tels[0]);
t.setTelNo(tels[1]);
}else
return null;
}
return t;
}else if (toType==String.class) {
Tel t=(Tel)value;
return "["+t.getSectionNo()+"-"+t.getTelNo()+"]";
}
return null;
}
}

MyTypeConverterAction-concersion.properties(这个文件应该放在和action一个目录下,并且配置文件名一定要是“action类型-converter.properties”):

tel=org.converter.MyTypeConverter

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="default" extends="struts-default">
<action name="typeconverter" class="org.action.MyTypeConverterAction">
<result name="success">/show.jsp</result>
</action>
</package>
</struts>

show.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>自定义转换类型</title>
  </head>
  <body>
  <s:property value="tel"/><br>
  区号:<s:property value="tel.sectionNo"/><br>
  号码:<s:property value="tel.telNo"/>
  </body>
</html>

MyTypeConverter也可以这样写:

package org.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import org.model.Tel;
public class MyTypeConverter extends StrutsTypeConverter{
public Object convertFromString(Map arg0,String[] arg1,Class arg2){
Tel tel=new Tel();
String[] str=arg1[0].split("-");
tel.setSectionNo(str[0]);
tel.setTelNo(str[1]);
return tel;
}
public String convertToString(Map arg0,Object arg1){
Tel tel=(Tel)arg1;
return "["+tel.getSectionNo()+"-"+tel.getTelNo()+"]";
}
}















0 0