• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小不点儿大的由我做主!
流年似水!
博客园    首页    新随笔    联系   管理    订阅  订阅

struts2笔记(5)

       几天没更新了,主要是觉得有点慢。还有就是,在网上写笔记也很慢,所以有点懒了,不过还是要写一写,把这两天学的东西记记。觉得自己最近写的东西越来越不容易看懂了,不过没事,自己能看懂就行,哈哈!那就开始吧,今天笔记的主要内容就是struts2的转换器。

      先说说平时不用转换器是怎么做的吧,以一个User类为例。首先要建一个User类,封装了name,pass,age,birth属性,当然不少不了get,set方法。此处就不写了。要对浏览器请求的参数进行处理,就要写一个servlet,并在servlet时显示出要刚才填写的信息,主要代码如下:

public void service(HttpServletRequest request,HttpServletResponse response) throws IOException
{
String name = request.getParameter("username");
String pass = request.getParameter("pass");
String strAge = request.getParameter("age");
...
int age = Integer.parseInt(strAge);
...
UserBean user = new UserBean(name,pass,age,birth);
...
out.println(user.getName());
out.println(user.getPass());
...
}

      此时仅仅是将页面输入数据做类型转换,并将其封装成一个UserBean的值对象,但示真正将该值对象传入控制逻辑,然后就直接使用该Servlet生成输出,输出该值对象的属性。(当然此处Servlet不要在web.xml里进行配置)

      而Struts2里,要将请求参数封装成一个对象,并在控制器里进行处理。也就是在服务器端要将请示数据转化为合适的数据类型。

在此有两种方式,一种是用户自定义的数据类型,一种是Struts2自定义的数据类型。对于前者,本人还有好多疑问,所以在此先打几个问号吧?????先总结一下后者。

Struts2内建的类型转换器:

   预定义类型 例如int、boolean、double等;

   日期类型: 使用当前区域(Locale)的短格式转换,即DateFormat.getInstance(DateFormat.SHORT);

   集合(Collection)类型, 将request.getParameterValues(String arg)返回的字符串数据与java.util.Collection转换;

   集合(Set)类型, 与List的转换相似,去掉相同的值;

   数组(Array)类型, 将字符串数组的每一个元素转换成特定的类型,并组成一个数 习这部分呢我是做了一个例子,就直接贴过来了。呵呵,省事

批量封装对象(Bean)

不知道大家是否遇过这种情况,在一个页面里同时提交几个对象。例如,在发布产品的页面,同时发布几个产品。我在之前一个项目就遇到过这种需求,当时用的是Struts 1.x。那是一个痛苦的经历,我在Google搜了很久都没有理想的结果。幸运的是,在Struts 2.0中这种痛苦将一去不复返。下面我就演示一下如何实现这个需求。

首先,在源代码文件夹下的tutorial包中新建Product.java文件,内容如下:

Code
package tutorial;
import java.util.Date;
publicclass Product {
    
private String name;
    privatedouble price;
    
private Date dateOfProduction;
    
public Date getDateOfProduction() {
        
return dateOfProduction;
    }
   
public void setDateOfProduction(Date dateOfProduction) {
        
this.dateOfProduction = dateOfProduction;
    }
    
public String getName() {
        
return name;
    }
   
public void setName(String name) {
        
this.name = name;
    }
   
public double getPrice() {
        
return price;
    }
public void setPrice(double price) {
        
this.price = price;
    }    

然后,在同上的包下添加ProductConfirm.java类,代码如下:

Code
package tutorial;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
public class ProductConfirm extends ActionSupport {
    
public List<Product> products;
   
public List<Product> getProducts() {
        
return products;
    }
   
public void setProducts(List<Product> products) {
        
this.products = products;
    }
      @Override
     
public String execute() {
         
for(Product p : products) {
            System.out.println(p.getName() 
+ " | "+ p.getPrice() +" | " + p.getDateOfProduction());
        }
        
return SUCCESS;
    }

接看,在同上的包中加入ProductConfirm-conversion.properties,代码如下:

Element_products=tutorial.Product

(我做实验的时候这个文件其实不用加也可以正常运行,呵呵)

再在struts.xml文件中配置ProductConfirm Action,代码片段如下:

<action name="ProductConfirm" class="tutorial.ProductConfirm">
<result>/ShowProducts.jsp</result>
</action>

在WEB文件夹下新建AddProducts.jsp,内容如下:

<%@ page contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<s:form action="ProductConfirm" theme="simple">
<table>
<tr style="background-color:powderblue; font-weight:bold;">
<td>Product Name</td>
<td>Price</td>
<td>Date of production</td>
</tr>
<s:iterator value="new int[3]" status="stat">
<tr>
<td><s:textfield name="%{'products['+#stat.index+'].name'}"/></td>
<td><s:textfield name="%{'products['+#stat.index+'].price'}"/></td>
<td><s:textfield name="%{'products['+#stat.index+'].dateOfProduction'}"/></td>
</tr>
</s:iterator>
<tr>
<td colspan="3"><s:submit /></td>
</tr>
</table>
</s:form>
</body>
</html>

在同样的文件夹下创建ShowProducts.jsp,内容如下:

<%@ page contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>

posted @ 2008-11-25 19:35  小不点儿大的由我做主!  阅读(229)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3