【第一步】
首先,先一个java类,继承StrutsTypeConverter类,对form提交的数据进行类型转换:
以一个实体类进行介绍:
(实体类如下)
package com.cal.entity;
public class Calculator {
private double num1;
private double num2;
private double result;
public double getNum1() {
return num1;
}
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum2() {
return num2;
}
public void setNum2(double num2) {
this.num2 = num2;
}
public double getResult() {
return result;
}
public void setResult(double result) {
this.result = result;
}
}
(1) Form表单这样写:(注意,提交表单中的name属性必须和Action中的属性一致,这里是cal)
<body>
<s:form id="form1" action="add">
<s:textfield label="两个数字,中间用逗号隔开" name="cal"></s:textfield>
<s:submit value="submit"></s:submit>
</s:form>
</body>
(2)写类CalculatorConverter,对form表单提交的cal进行类型转换:
package com.cal.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.cal.entity.Calculator;
public class CalculatorConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map arg0, String[] arg1,Class arg2) {
System.out.println("-------comeon----------");
String v=arg1[0];//arg1为form表单提交上来的数据,为数组
String[] nums=v.split(",");
Calculator cal=new Calculator();
cal.setNum1(Double.parseDouble(nums[0]));
cal.setNum2(Double.parseDouble(nums[1]));
return cal;
} }
【第二步】
注册properties资源文件,命名方式如下:
第一种情况:
CalAction-conversion.properties(当将该资源文件和要转换的Action写在一个目录下时,这样写,-前面的为Action的java文件名)
内容为:cal=com.cal.converter.CalculatorConverter
第二种情况:
xwork-co conversion.properties(当其写在src目录下面时这样命名)
内容为:
com.cal.entity.Calculator=
com.cal.converter.CalculatorConverter
【第三步】
Action文件,关键代码如下:
package com.cal.web.action;
public class CalAction extends ActionSupport{
private Calculator cal;
publicCalculator getCal() {
returncal;
}
publicvoid setCal(Calculator cal) {
this.cal= cal;
}
//相加方法
@Action(value="add",results={@Result(name="success",location="/cal.jsp",type="dispatcher")})
publicString addCalAction(){
System.out.println(cal.getNum1()+"~~~~"+cal.getNum2());
/* cal.setResult(cal.getNum2()+cal.getNum1());
*/ return"success";
}}
【注意事项】
注意事项:提交表单中的name属性值应该和Action中变量的定义名字一致,举例说明:
如果定义的为日期类型转换器,
在Action中的变量命名为-------privateDate date;
此时,表单中的name属性这样写----<s:textfieldname="date"/>
如果定义的为类的各个变量的转换器,
在Action中的变量命名为-------privatePerson p;
此时,表单中的name属性这样写----<s:textfieldname="p"/>
编写该方案时的工程文件截图: