`
3806850
  • 浏览: 93919 次
  • 性别: Icon_minigender_2
  • 来自: 沈阳
社区版块
存档分类
最新评论

struts2批量封装到set/list元素(转载)

    博客分类:
  • SSH
阅读更多
这个应该是属于Struts2类型转换的话题,本篇主要是讨论如何将页面上表单的值批量封装到一个Set集合中去,因为项目中用的是Hibernate,基本上所有的集合类型用的都是Set类型。至于如何批量封装数据到其它的集合类型如(List,Map)可以参看这篇文章,说的很详细了:http://hi.baidu.com/wava/blog/item/01d58926c42dac158b82a134.html。如何给这个Set属性赋值花费了我相当的时间,下面直接贴例子吧。

CustomerInserterAction.java:处理请求,含有一个Set类型的属性orders

package test.web;


import java.util.HashSet;

import java.util.List;

import java.util.Set;


import test.persistence.Customer;

import test.persistence.Order;

import test.service.ICustomerService;


import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ActionContext;


/**

* @author zhukai 2007-8-31

*

*/

public class CustomerInserterAction extends ActionSupport {

     private Customer customer;


     private Set<Order> orders=new HashSet();


     private ICustomerService customerService;


     public Customer getCustomer() {

        return customer;

     }


     public void setCustomer(Customer customer) {

        //customer.setOrders(orders);

        this.customer = customer;

     }


     public String execute() {

        customer.setOrders(orders);

        for(Order order:orders)

            order.setCustomer(customer);

        customerService.addCustomer(customer);

        return SUCCESS;

     }


     public Set getOrders() {

        return orders;

     }


     public void setOrders(Set orders) {

        this.orders = orders;

     }


     public ICustomerService getCustomerService() {

        return customerService;

     }


     public void setCustomerService(ICustomerService customerService) {

        this.customerService = customerService;

     }

}

Customer.java和Order.java:两个实体类,分别代表一个消费者和一个订单,并且一个消费

                          者可以有多个订单,而一个订单只属于一个消费者。

package test.persistence;


import java.io.Serializable;

import java.util.Date;

import java.util.HashSet;

import java.util.Set;


/**

* @author zhukai

*/


public class Customer implements Serializable {


     private Long id;


     private String name;


     private String email;


     private String password;


     private String phone;


     private boolean married;


     private String address;


     private char sex;


     private String description;


     private Date birthday;


     private Date registeredTime;


     private Set orders = new HashSet();


     /**

      * hibernate要求持久化类必须提供一个不带参数的默认构造方法

      */

     public Customer() {

        // TODO Auto-generated constructor stub

     }


     public Customer(String name) {

        super();

        this.name = name;

     }


     public Customer(String name, Set orders) {

        super();

        this.name = name;

        this.orders = orders;

     }


     public String getAddress() {

        return address;

     }


     public void setAddress(String address) {

        this.address = address;

     }


     public String getDescription() {

        return description;

     }


     public void setDescription(String description) {

        this.description = description;

     }


     public Date getBirthday() {

        return birthday;

     }


     public void setBirthday(Date birthday) {

        this.birthday = birthday;

     }


     public String getEmail() {

        return email;

     }


     public void setEmail(String email) {

        this.email = email;

     }


     public Long getId() {

        return id;

     }


     public void setId(Long id) {

        this.id = id;

     }

     public String getName() {

        return name;

     }


     public void setName(String name) {

        this.name = name;

     }


     public String getPassword() {

        return password;

     }


     public void setPassword(String password) {

        this.password = password;//

     }


     public String getPhone() {

        return phone;

     }


     public void setPhone(String phone) {

        this.phone = phone;

     }


     public Date getRegisteredTime() {

        return registeredTime;

     }


     public void setRegisteredTime(Date registeredTime) {

        this.registeredTime = registeredTime;

     }


     public char getSex() {

        return sex;

     }


     public void setSex(char sex) {

        this.sex = sex;

     }


     public Set getOrders() {

        return orders;

     }


     public void setOrders(Set orders) {

        this.orders = orders;

     }


     public boolean isMarried() {

        return married;

     }


     public void setMarried(boolean married) {

        this.married = married;

     }


}

reg.jsp:前台页面,用于输入数据

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title></title>

</head>

<body>

<div style="color:red">

      <s:fielderror />

</div>

<form action="register.action" method="post">

<table width="389" border="1" align="center">

   <tr>

     <th height="30" colspan="4" scope="col"></th>

     </tr>

   <tr>

     <td width="65" height="30">姓名</td>

     <td width="68"><input name="customer.name" type="text" id="customer.name" size="10"></td>

     <td width="75">电子邮箱</td>

     <td width="153"><input name="customer.email" type="text" id="customer.email" size="10"></td>

   </tr>

   <tr>

     <td height="30">地址</td>

     <td><input name="customer.address" type="text" id="customer.address" size="10"></td>

     <td>电话</td>

     <td><input name="customer.phone" type="text" id="customer.phone" size="10"></td>

   </tr>

   <tr>

     <td height="30">密码</td>

     <td><input name="customer.password" type="text" id="customer.address" size="10"></td>

     <td>性别</td>

     <td><input name="customer.sex" type="radio" id="customer.sex" size="10" value="M" checked="checked">男&nbsp;<input name="customer.sex" type="radio" id="customer.sex" size="10" value="F">女</td>

   </tr>

    <tr>

     <td height="30">出生日期</td>

     <td><input name="customer.birthday" type="text" id="customer.address" size="10"></td>

     <td>注册日期</td>

     <td><input name="customer.registerTime" type="text" id="customer.phone" size="10"></td>

   </tr>

   <tr>

     <td height="30" colspan="4">订单一</td>

   </tr>

   <tr>

     <td height="30">订单号</td>

     <td><input name="orders.makeNew[0].orderNumber" type="text"   size="10"></td>

     <td>配送地址</td>

     <td><input name="orders.makeNew[0].address" type="text"   size="10"></td>

   </tr>

   <tr>

     <td height="30" colspan="4">订单二</td>

     </tr>

   <tr>

     <td height="30">订单号</td>

     <td><input name="orders.makeNew[1].orderNumber" type="text"   size="10"></td>

     <td>配送地址</td>

     <td><input name="orders.makeNew[1].address" type="text"   size="10"></td>

   </tr>

   <tr>

     <td height="30" colspan="4">订单三</td>

     </tr>

   <tr>

     <td height="30">订单号</td>

     <td><input name="orders.makeNew[2].orderNumber" type="text"   size="10"></td>

     <td>配送地址</td>

     <td><input name="orders.makeNew[2].address" type="text"   size="10"></td>

   </tr>

   <tr>

     <td height="30" colspan="4"><input type="submit" value="提交"><input type="reset" value="重置"> </td>

   </tr>

   <tr>

</table>


</form>

</body>

</html>

CustomerInserterAction-conversion.properties:类型转换的配置文件,我的内容如下

     KeyProperty_orders=id

     Element_orders=test.persistence.Order

     CreateIfNull_orders=true

有几个要说明的地方,这时封装Set集合时必须要注意的:

1.CustomerInserterAction.java中对orders必须要初始化,如下所示:

    private Set<Order> orders=new HashSet();

2.在jsp页面中给变量命名时必须要按照如下的格式:

    <input name="orders.makeNew[0].orderNumber" type="text"   size="10">

    必须要使用makeNew运算符,这样ognl才能帮我创建新的对象,否则orders会为空。当时如果集合类型是List,就不必这样,直接name="orders[0].orderNumber"就可以了。

3.在Class-conversion.properties文件中加上KeyProperty_orders=id,这是封装Set时必须的。这个主要是用来设置检索集合中元素时的索引,具体含义可以参看http://wiki.javascud.org/display/ww2cndoc/Type%20Conversion,它里面对类型转换配置文件做了详细的介绍。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1799836
分享到:
评论
1 楼 Neoman 2012-07-05  
[url][/url][flash=200,200][/flash]
代码: 
...
(支持java, ruby, js, xml, html, php, python, c, c++, c#, sql)
[img][/img]

相关推荐

    Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)

    Struts2会根据表单元素的名字自动填充这些集合,`list[0]`会对应到`list`的第0个元素,`map['key']`会对应到`map`的键为`key`的元素。 3. **结果的展示**: 一旦Action处理完数据,我们可以使用`&lt;s:iterator&gt;`...

    Struts2+ajax+json返回list.docx

    `AuditDivListVO`类需要有对应的get和set方法,以便Struts2能够序列化。 ```java public class AuditAction extends ActionSupport { private List&lt;AuditDivListVO&gt; result1; // getters and setters... ...

    Struts2关于批量提交数据-解决方案

    ### Struts2批量提交数据解决方案 在Web应用开发过程中,特别是在使用Struts2框架时,经常需要处理大量的数据提交操作。这些数据可能来自于用户输入或者是系统内部的数据迁移等场景。对于这种需求,本文档将详细...

    struts2对Ognl的封装--PropertyAccessor

    "struts2对Ognl的封装--PropertyAccessor"这个主题主要涉及Struts2框架如何处理OGNL表达式,特别是如何通过PropertyAccessor接口来访问和操作对象的属性。 首先,我们来了解什么是OGNL。OGNL是Struts2的核心组件之...

    Struts2中的参数传递

    1. **封装OGNL操作,实现值的传递**:Struts2通过对OGNL表达式的封装,实现从客户端传入的参数到Java对象之间的值传递。这一过程包括但不限于对各种复杂类型的处理,如数组、列表、映射等。 2. **类型转换**:为了...

    struts2框架学习笔记整理

    - **集合参数封装**:使用List、Set等集合类型封装多个相同类型的参数。 - **Map参数封装**:使用Map类型封装键值对形式的参数。 ##### 3.2 访问Servlet API - **通过ActionContext访问**:使用ActionContext获取...

    struts2使用json返回对象和列表(案例)

    Struts2是一个流行的Java web框架,它主要用于构建MVC(模型-视图-控制器)架构的应用程序。在Struts2中,JSON(JavaScript Object Notation)的使用极大地增强了与前端JavaScript进行异步交互的能力,使得AJAX...

    struts2 标签使用

    在 Struts2 中,所有的请求都会被封装到一个叫做 `ValueStack` 的对象中。这个 `ValueStack` 包含了请求中的所有数据,包括表单提交的数据、从 Action 类返回的对象等。通过 OGNL 表达式,我们可以直接在 JSP 页面...

    struts2中核心知识点(职场必备)

    Struts2是一个强大的MVC框架,它基于Model-View-Controller(MVC)设计模式,为企业级Java应用提供了结构化开发的支持。以下是Struts2的一些核心知识点,掌握这些内容能够帮助你在面试中表现出色。 1. **MVC模式的...

    连数据库的struts2例子

    Struts2是一个强大的Java web开发框架,它基于MVC(Model-View-Controller)设计模式,为构建可维护性高、结构清晰的Web应用程序提供了强大的支持。在这个"连数据库的Struts2例子"中,我们将深入探讨如何使用Struts2...

    struts2+pager-taglib 实现分页小例子

    然后,Action类将这些数据封装到一个对象(如UserList)中,并设置到ValueStack,以便在JSP页面上使用。在Struts2中,我们可以利用Pager-taglib的标签来展示分页链接和当前页的信息。在JSP页面上,可以使用`...

    Struts2分页程序

    2. **数据封装**:将数据封装到一个列表(List)中。 3. **分页处理**:通过Struts2的标签或自定义组件实现分页逻辑。 4. **显示数据**:在前端页面上展示数据,并提供导航控件让用户可以翻页。 ### 技术栈 - JDK版本...

    struts2标签库

    Form标签是Struts2标签库中最常用的一类标签,用于生成表单元素,这些元素能够自动绑定到后端对象,极大地简化了表单的处理流程。常见的Form标签包括`&lt;s:form&gt;`、`&lt;s:textfield&gt;`、`&lt;s:submit&gt;`等。 ### 总结 通过...

    struts2实现分页显示

    在Java Web开发中,Struts2是一个非常流行的MVC框架,它提供了强大的功能来构建动态、数据驱动的Web应用程序。当我们处理大量数据时,分页显示是必不可少的,它可以提高用户体验,避免一次性加载过多的数据导致页面...

    巧用struts标签之checkboxlist选中默认值换行处理

    在JSP页面加载完成后,通过获取`checkboxlist`对应的`td`元素,然后遍历其中的所有`checkbox`元素,每5个复选框后插入一个换行符` `,并为每个复选框前添加一个`label`元素,以便于更好的可访问性。 ```...

    实用的struts2分页

    为了从数据库中获取数据并进行分页处理,需要定义一个`PageDAO`类,负责执行SQL查询并将结果封装到`Student`对象列表中。`PageDAO`类应包含连接数据库、执行查询、处理结果集的逻辑。 示例代码片段如下(部分代码未...

    struts 2分页 实例

    ### Struts 2 分页实例知识点详解 #### 一、项目环境搭建与配置 1. **新建Web项目**: - 使用Eclipse IDE创建一个新的Web项目。 - 项目名称可以自定义,例如命名为“Struts2Pagination”。 2. **导入Struts 2 ...

    struts2中doubleselect标签的应用

    在本篇文章中,我们将深入探讨Struts2框架中的`doubleselect`标签的使用方法,并结合一个具体的示例来展示如何将此标签与Hibernate和Spring框架整合在一起,以便于更好地理解和运用这一技术。 ### Struts2框架简介 ...

    2014 java servet jdbc struts struts2面试题

    10. **Java集合框架**:List、Set、Queue和Map接口,以及它们的实现类如ArrayList、LinkedList、HashSet、HashMap等的工作原理。 【Servlet面试题】 1. **Servlet生命周期**:包括加载、实例化、初始化、服务、...

Global site tag (gtag.js) - Google Analytics