struts的类型转换器-个人制作

本文介绍如何在Struts2框架中实现自定义类型转换器,以支持表单提交的复杂类型数据,并通过示例详细讲解了创建类型转换器类、配置资源文件及在Action中使用的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


【第一步】

         首先,先一个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];//arg1form表单提交上来的数据,为数组

      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写在一个目录下时,这样写,-前面的为Actionjava文件名)

     内容为: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"/>

编写该方案时的工程文件截图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值