Struts2讲义31

本文介绍如何在Struts2框架中实现List集合类型的Java对象类型转换,包括Action类定义、配置文件设置及JSP页面展示等关键技术点。

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

7.1.2   List 集合类型数据类型转换功能

技术要点

本节代码具体介绍包含多个 Java 对象的 List 集合类型如何进行类型转换。

List 集合类型类型转换 Action 中使用方式。

List 集合类型类型转换在视图界面的使用方式。

演示代码

使用的 Action 文件:

<!----------------文件名:AddMaterialAction.java------------------>
public class AddMaterialAction extends ActionSupport {
         private List<Material> materialList;  
 
         public String execute() throws Exception {
                   return SUCCESS;
         }

         public List<Material> getMaterialList() {
                   return materialList;
         }
 
         public void setMaterialList(List<Material> materialList) {
                   this.materialList = materialList;
         }
}
 

配置文件中的导航定义:

<!-----------------文件名:struts.xml----------------->
<!-- Action所在包定义 -->
         <package name="C07.1.2" extends="struts-default" >              
                   <action name="addMaterial"
                            class="com.action.AddMaterialAction">
                            <result name="input">/jsp/addMaterial.jsp</result>
                            <result name="success">/jsp/showMaterial.jsp</result>
                   </action>
         </package>
 

指定 List 类型中元素是具体何种对象属性文件

<!----------文件名:AddMaterialAction-conversion.properties--------------->
#集合属性-List类型
Element_materialList=com.model.Material
 

类型转换的数据输入 JSP 文件:

<!-------------------文件名:addMaterial.jsp-------------------->
…………
         <!-- 材料输入表单 -->
                   <table>
                            <s:form id="materialForm" action="addMaterial" theme="simple">
                            <table>
                            <tr>
                            <td>材料名</td>
                            <td>价格</td>
                            <td>库存量</td>
                            <td>过期日期</td>
                            </tr>
                            <s:iterator value="new int[4]" status="m">
                            <tr>
                            <td><s:textfield name="%{'materialList['+#m.index+'].material'}" /></td>
            <td><s:textfield name="%{'materialList['+#m.index+'].bid'}" /></td>
            <td><s:textfield name="%{'materialList['+#m.index+'].mount'}" /></td>
            <td><s:datetimepicker name="%{'materialList['+#m.index+'].expireDate'}" /></td>
                            </tr>
                            </s:iterator>
                            <tr>
                            <td colspan="4"><s:submit value="提交"></s:submit>
                            </tr>
                            </table>
                            </s:form>
                   </table>   
…………
 

类型转换的显示数据 JSP 文件:

<!--------------------文件名:showMaterial.jsp---------------->
…………
                <!-- 材料数据显示 -->
        <table>
            <tr>
            <td>材料名</td>
            <td>价格</td>
            <td>库存量</td>
            <td>过期日期</td>
            </tr>
            <s:iterator value="materialList" status="m">
            <tr>
            <td><s:property value="material" ></s:property></td>
            <td><s:property value="bid" ></s:property></td>
            <td><s:property value="mount" ></s:property></td>
            <td><s:property value="expireDate" ></s:property></td>
            </tr>
            </s:iterator>
         </table>           
…………
 

数据输入如图 7.3

 

7.3  多个 material 对象数据输入(组合成 List 集合类型)

显示数据如图 7.4 。请注意各种 Java 类型数据在显示页面和输入页面的格式和显示不同之处。

 

7.4  多个 material 对象数据显示

代码解释

1 )和上一小节示例相比。本示例虽然输入的也是 Material 对象,不过却是多个 Material 对象输入。这里页面上显示的是一共 4Material 对象输入。将这些 Material 对象组装成 List 集合类型,然后也可以让 Struts2 自带的类型转换器进行类型转换。

首先笔者在 Action 代码中定义了 List 类型变量。并且运用 Java5 中的泛型来表明该 List 集合类型变量中的元素都是 Material 对象。当然,也可以在 Action 代码中不使用泛型来标明是何种对象作为 List 集合类型的元素。另一种方法就是示例中写明的在属性文件中指定 List 集合类型的元素是何种对象。

注意:该属性文件属于局部类型转换属性定义文件。文件名要以 ActionName 打头,然后以“ --conversion.properties ”结尾。这表示是对该 Action 中的 List 集合类型指定元素类型。而且该属性文件一定要和 Action 放在同一目录下。否则运行系统时候 Struts2 是不会知道该 Action List 集合类型变量元素是何种类型对象。

2 )试设想有一种情况,多个 Action 都需要将某一变量的类型进行转换。此时可以像之前所述使用属性文件来定义被转换类型的变量。但是 1Action 定义 1 个属性文件则太浪费时间。因此 Struts2 中还有个全局类型转换属性定义文件,这样所有需要类型转换的 Action 都可以调用该文件中定义的需要类型转换的变量。全局属性文件名字必须为“ xwork-conversiion.properties ”。文件中定义的内容其实和局部属性文件中大同小异,只是这些被定义的变量可以在所有 Action 中进行类型转换。全局属性文件没必要和具体 Action 代码文件放在一起,只需要放在源代码根目录下即可。也就是说全局属性文件直接放在“ src ”文件夹下即可。

3 )在页面输入的 JSP 中,千万不能将 List 集合类型的变量名写错,否则 Action 是得不到具体在页面上输入的值。而且因为是 List 类型,所以可以利用 OGNL 来循环遍历。这样在页面上可依次输入数据。数据显示的 JSP 页面上没有什么特别需要注意的,读者可以看到只是利用 Struts2 的标签来显示这些数据。

4 )读者可由图 7.3 、图 7.4 看出,批量的 Material 对象数据输入其实和单个 Material 对象输入本质上没有多大区别。在视图界面上只是利用 OGNLStruts2 标签来保证数据可以输入和显示。在 Action 这一层和普通的 Struts2Action 导航没有多大区别。最重要的是全局和局部类型转换属性文件的定义。让系统明白集合类型中包含的元素是何种对象。不过也请读者不要误解,以为 Set 集合类型转换也是如此。接下来笔者将讲解 Set 集合类型数据类型转换的注意点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值