`
longgangbai
  • 浏览: 7339075 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Struts2.0中批量操作(update Or Add)的實現和注意點

阅读更多

   在項目中,需要針對一批数据进行或添加或着修改操作。使用Struts2.0 实现。本人仅使用Web

使用是防止对个对象修改添加时,可能出项空造成部分数据不对应所以进行,进行特殊处理。

 

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

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

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

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

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

 

  /**
 * 可选项产品价格的管理
 *
 * @author longgangbai
 *
 */
@SuppressWarnings("serial")
public class ProductPriceAction extends
  BaseAction<ProductItemPrice, ProductItemPriceService>

以上struts2的action采用和SpringSide中设计思路一样:

 

简述如下:

ProductItemPrice:父类实体

ProductItemPriceService:实体对应的Service层

其中ProductItemPrice有两个子类:

/**
 * 可选项关联的价格项
 *
 * @author longgangbai
 *
 */
@Entity
@DiscriminatorValue("MultipleProductItemPrice")
@GenericGenerator(name = "seq_gen", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = {
  @Parameter(name = "sequence_name", value = "seq_MultipleProductItemPrice"),
  @Parameter(name = "initial_value", value = "100000") })
public class MultipleProductItemPrice extends ProductItemPrice

 

/**
 * 单选项关联的价格项信息
 *
 * @author longgangbai
 *
 */
@Entity
@DiscriminatorValue("SingleProductItemPrice")
@GenericGenerator(name = "seq_gen", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = {
  @Parameter(name = "sequence_name", value = "seq_SingleProductItemPrice"),
  @Parameter(name = "initial_value", value = "100000") })
public class SingleProductItemPrice extends ProductItemPrice

 

 

 

 

 

特殊处理的地方分为以下几点:

 

 /**
  * 查询可选项或单选项的价格的信息
  */
 private List<ProductItemPrice> productItemPrices;   //仅仅用于展示
 /**
  * 查询可项的价格的信息
  */
 @SuppressWarnings("unchecked")
 private List mproductItemPrices; //用于操作可选项操作MultipleProductItemPrice 

 /**
  * 查询多选项的价格的信息
  */
 @SuppressWarnings("unchecked")
 private List sproductItemPrices;//用于操作可选项操作SingleProductItemPrice

 

 

有点怪异的地方:

 

mproductItemPrices 存储MultipleProductItemPrice 的集合但是不可以泛型有点郁闷

 

sproductItemPrices存储SingleProductItemPrice 的集合但是不可以泛型有点郁闷

 

但是如果不存在父子关系可以使用泛型,郁闷吧?^_^

希望有高人指点!!

 

通过Struts2.0的IOC功能实现注入:

 

 

在Struts2.0的Action的局部属性文件内容配置如下:

Action局部配置文件的命名规则:

如下:

   Action的名称+“-”+conversion.properties

 

配置的属性:

   Element_集合的名称=集合对象中对应的对象类

Element_productItemPrices=com.unutrip.vacation.model.product.ProductItemPrice
Element_sproductItemPrices=com.unutrip.vacation.model.single.SingleProductItemPrice
Element_mproductItemPrices=com.unutrip.vacation.model.multiple.MultipleProductItemPrice

 

 

在展示是的技巧:

重点在针对标签的命名规则

 

  针对可选项集合:MultipleProductItemPrice

 

便利显示并支持修改如下:

 

   <s:iterator status="sta"  value="mproductItemPrices">
       <tr id="<s:property value='%{#sta.index+1}'/>">// 目的为动态生成对象做准备
      <td>
       <s:hidden name="%{'mproductItemPrices['+#sta.index+'].productId'}"/>
      <s:hidden name="%{'mproductItemPrices['+#sta.index+'].id'}"/>
                      <s:property value="%{#sta.index+1}"/>     
      </td> 
      <td>
        <s:textfield name="%{'mproductItemPrices['+#sta.index+'].startDate'}" size="6" />
      </td> 
      <td>
         <s:textfield name="%{'mproductItemPrices['+#sta.index+'].endDate'}" size="6" />
      </td> 
      <td><s:textfield name="%{'mproductItemPrices['+#sta.index+'].adultPrice'}" size="6" /></td> 
      <td><s:textfield name="%{'mproductItemPrices['+#sta.index+'].adultBasePrice'}" size="6" /></td> 
      <td><s:textfield name="%{'mproductItemPrices['+#sta.index+'].childPrice'}" size="6" /></td> 
      <td><s:textfield name="%{'mproductItemPrices['+#sta.index+'].childBasePrice'}" size="6" /></td> 
      <td><s:textfield name="%{'mproductItemPrices['+#sta.index+'].babyPrice'}" size="6" /></td> 
      <td><s:textfield name="%{'mproductItemPrices['+#sta.index+'].babyBasePrice'}" size="6" /></td> 
      <td><s:textfield name="%{'mproductItemPrices['+#sta.index+'].adultOfferPrice'}" size="6" /></td> 
      <td><s:textfield name="%{'mproductItemPrices['+#sta.index+'].childOfferPrice'}" size="6" /></td> 
       </tr>
    </s:iterator>

 

由于项目支持动态添加所以:

本人经过思考,不得其解,则查看源代码是发现生成静态标签的规则如下:

 

  得到规律如下:

<input type='text' name='mproductItemPrices[0].startDate'  size='6'/>

 

 

备注其中红色的规律:集合的名称【下标】.属性

 

最后根据静态标签的规则实现需要的动态添加,并且组成的集合对象的目的

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    struts2.0中文教程

    06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新...

    Struts2.0视频教程+struts2.0中文教程

    Struts2.0是Java Web开发中的一个强大框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性高、结构清晰的Web应用程序的工具。这个"Struts2.0视频教程+struts2.0中文教程"包含的资源旨在...

    Struts 2.0系列(MAX)

    在Struts 2.0中实现表单数据校验(Validation) Struts 2的基石——拦截器(Interceptor) 在Struts 2中实现IoC 在Struts 2中实现文件上传 在Struts 2中实现CRUD Struts 2中的OGNL Strus 2的新表单标志的使用 ...

    struts2.0的特点

    在Struts2.0中,核心概念之一是Action,它被设计为一个简单的POJO(Plain Old Java Object),这使得Action的实现更加灵活和简洁。Action类不再需要继承特定的基类,而是通过配置文件(如struts.xml)来定义其行为。...

    Struts2.0的api

    让我们深入探讨Struts2.0 API的核心概念、关键组件以及它们在实际开发中的应用。 首先,`Struts2.0中文教程.chm`可能包含对框架的详细解释,包括Action、Result、Interceptor等核心概念。Action是Struts2的核心,它...

    Struts_2.0从入门到精通

    CRUD(Create、Read、Update、Delete)是数据库操作的基础,Struts2.0通过一系列的Action和视图模板,实现了对数据库数据的增删改查操作。开发者可以基于Struts2.0提供的框架,快速构建出功能完备的数据管理界面。 ...

    struts 2.0

    在Struts 2.0中,你可以看到许多Struts 1.0的改进,以及WebWork框架引入的新特性,这些改进使得Struts 2.0在处理复杂业务逻辑和用户交互时表现得更为出色。 1. **Action和Result**: 在Struts 2.0中,Action类是处理...

    三大框架中文文档中的struts2.0开发手册(程序员必看)

    Struts2.0是Java Web开发中非常重要的一个MVC框架,它是在原有的Struts1.x基础上进行改进和发展而来的。这个"三大框架中文文档中的struts2.0开发手册"为程序员提供了一份详尽的参考资料,帮助他们理解和掌握Struts...

    Struts2.0中文教程权威版

    06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新...

    Struts 2.0

    在`web.xml`中,需要定义一个名为`struts`的Filter,并指定`FilterDispatcher`类作为Filter实现。`init-param`用于配置Action的扩展名,如将默认的`.do`改为`.action`。过滤器映射`&lt;filter-mapping&gt;`应覆盖所有URL,...

    Struts2.0 Jar包

    Struts2.0是一款强大的Java Web框架,它在MVC(Model-View-Controller)设计模式的基础上,提供了灵活且强大的架构来构建企业级的Web应用程序。这个“Struts2.0 Jar包”包含了所有必要的库文件,使得开发者可以便捷...

    struts2.0实现对后台数据库的操作

    Struts2.0是一个强大的Java Web开发框架,它极大地简化了从前端到后端的数据交互和业务逻辑处理。本教程将深入讲解如何使用Struts2.1.8版本来实现对MySQL数据库的操作,包括添加、删除和修改数据的功能。 首先,...

    Struts2.0中文教程

    通过这个“Struts2.0中文教程”,开发者可以全面了解并掌握Struts2.0框架,提升Web开发效率,同时也能了解到Struts2.0在实际项目中的应用和问题解决策略。教程中的`.chm`文件是一种Windows平台下的帮助文档格式,...

    struts2.0 应用开发,基本功能全部实现

    在Struts2.0的应用开发中,首先我们需要理解其核心概念: 1. **Action类**:这是业务逻辑的载体,通常继承自`com.opensymphony.xwork2.ActionSupport`或自定义Action接口。开发者在Action类中编写处理用户请求的...

    JavaEE源代码 Struts2.0

    JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0...

    struts 2.0 详细配置

    ### Struts 2.0 详细配置解析 #### 一、Struts 2.0 简介 Struts 2.0 是一个基于 Java 的开源框架,用于开发 Web 应用程序。它继承了 Struts 1.x 的优点,并在架构上进行了改进,更加灵活且易于扩展。Struts 2.0 ...

    struts2.0入门案例

    Struts2.0是Struts1的升级版,它在功能和易用性上都有显著提升。框架的核心组件包括Action、Result、Interceptor等,它们协同工作以处理HTTP请求并生成响应。Action是业务逻辑的载体,Result负责视图的呈现,...

Global site tag (gtag.js) - Google Analytics