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文件,内容如下:
然后,在同上的包下添加ProductConfirm.java类,代码如下:
接看,在同上的包中加入ProductConfirm-conversion.properties,代码如下:
(我做实验的时候这个文件其实不用加也可以正常运行,呵呵)
再在struts.xml文件中配置ProductConfirm Action,代码片段如下:
<result>/ShowProducts.jsp</result>
</action>
在WEB文件夹下新建AddProducts.jsp,内容如下:
<%@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,内容如下:
<%@taglib prefix="s" uri="/struts-tags"%>
浙公网安备 33010602011771号