解决struts2日期类型转换问题的完整攻略如下:
问题描述
在使用struts2框架中,如果后台 Action 接收的参数是日期类型,容易出现类型转换异常。例如,在前端页面中,日期类型通常采用字符串格式传递,如“2019-10-01”,但是在后台 Action 中,需要将该字符串转换为日期类型对象,否则无法正确处理业务逻辑。如果日期格式不一致,将会出现类型转换异常,导致程序出现错误。因此,我们需要解决 struts2 的日期类型转换问题。
解决方法
解决 struts2 的日期类型转换问题的方法需要在 struts2 的配置文件中进行配置。可以在项目的 struts.xml 配置文件中增加如下的全局类型转换器:
<global-results>
<result name="error">/error.jsp</result>
<!-- 定义 Date 类型转换 -->
<global-allowed-classes>
<allowed-class name="java.util.Date" />
</global-allowed-classes>
<global-type-conversions>
<conversion>
<from-type>java.lang.String</from-type>
<to-type>java.util.Date</to-type>
<converter-class>org.apache.struts2.util.StrutsTypeConverter</converter-class>
</conversion>
</global-type-conversions>
</global-results>
此时就配置了一个全局的类型转换器,将 String 类型转换为 Date 类型。具体如下:
-
在 global-allowed-classes 标签中,定义了全局允许操作的类。这里我们定义了一个 java.util.Date 类型。
-
在 global-type-conversions 标签中,定义了一个类型转换。其中,from-type 标签定义了要转换的源类型,to-type 标签定义了需要转换成的目标类型,converter-class 标签指定了转换器的类名,这里使用了 struts2 框架自带的转换器 org.apache.struts2.util.StrutsTypeConverter。
-
配置完成后,就可以在组装 Action 参数的时候,让 struts2 自动完成类型转换,例如:
public class TestAction extends ActionSupport{
private Date birthday;
// get、set 方法...
}
public class TestAction extends ActionSupport{
private Date birthday;
// get、set 方法...
@Override
public String execute(){
System.out.println("birthday: "+birthday);
return SUCCESS;
}
}
此时,在前端页面中传递日期类型的字符串参数,如“2019-10-01”,在 Action 中获取到的 birthday 属性值即为对应的日期类型,这里打印出来的结果为:
birthday: Tue Oct 01 00:00:00 CST 2019
示例说明
下面给出两个示例说明:
示例一:
需求:将前台传递的查询日期参数转换为日期类型对象,以支持后续的数据库查询操作。
前端页面传递的参数示例:
<input type="text" id="beginDate" name="beginDate" class="form-control">
Action 类中定义的属性:
private Date beginDate;
// get、set 方法...
此时,如果不进行类型转换,Struts 2 将无法根据字符串正确创建 Date 对象,因此会报错。此时我们需要将从前台传递的日期字符串转换为日期类型对象。
在 struts.xml 文件中添加如下配置:
<global-results>
<result name="error">/error.jsp</result>
<global-allowed-classes>
<allowed-class name="java.util.Date" />
</global-allowed-classes>
<global-type-conversions>
<conversion>
<from-type>java.lang.String</from-type>
<to-type>java.util.Date</to-type>
<converter-class>org.apache.struts2.util.StrutsTypeConverter</converter-class>
</conversion>
</global-type-conversions>
</global-results>
此时,在 Action 中就能正确获取并处理前台传递的日期参数:
public String query() {
// 此处获取到的 beginDate 属性即为转换后的日期类型对象
System.out.println(beginDate);
return SUCCESS;
}
示例二:
需求:将前端传递的参数中的开始日期和结束日期转换为日期类型对象,以支持后续的数据库查询操作。
前端页面传递的参数示例:
<input type="text" id="beginDate" name="beginDate" class="form-control">
<input type="text" id="endDate" name="endDate" class="form-control">
Action 类中定义的属性:
private Date beginDate;
private Date endDate;
// get、set 方法...
此时,在 struts.xml 配置文件中添加如下配置:
<global-results>
<result name="error">/error.jsp</result>
<global-allowed-classes>
<allowed-class name="java.util.Date" />
</global-allowed-classes>
<global-type-conversions>
<conversion>
<from-type>java.lang.String</from-type>
<to-type>java.util.Date</to-type>
<converter-class>org.apache.struts2.util.StrutsTypeConverter</converter-class>
</conversion>
</global-type-conversions>
</global-results>
此时,在 Action 中就能正确获取并处理前台传递的日期参数:
public String query() {
// 此处获取到的 beginDate 和 endDate 属性即为转换后的日期类型对象
System.out.println(beginDate);
System.out.println(endDate);
return SUCCESS;
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何解决struts2日期类型转换 - Python技术站