Posted on 2008-08-25 01:45
∪∩BUG 阅读(1032)
评论(3) 编辑 收藏 所属分类:
Struts2学习笔记
项目树形图
WebRoot/WEB-INF/web.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<web-app id="WebApp_ID" version="2.4"
3 xmlns="http://java.sun.com/xml/ns/j2ee"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
6 <display-name>Struts2Hello</display-name>
7 <filter>
8 <filter-name>struts2</filter-name>
9 <filter-class>
10 org.apache.struts2.dispatcher.FilterDispatcher
11 </filter-class><!-- 以过虑器的形式出现 -->
12 </filter>
13 <filter-mapping>
14 <filter-name>struts2</filter-name>
15 <url-pattern>/*</url-pattern><!-- 过虑所有内容 -->
16 </filter-mapping>
17 <welcome-file-list>
18 <welcome-file>index.html</welcome-file>
19 <welcome-file>index.htm</welcome-file>
20 <welcome-file>index.jsp</welcome-file>
21 <welcome-file>default.html</welcome-file>
22 <welcome-file>default.htm</welcome-file>
23 <welcome-file>default.jsp</welcome-file>
24 </welcome-file-list>
25</web-app>
26
WebRoot/index.jsp
1<%@page contentType="text/html; charset=GBK"%>
2<%@taglib prefix="s" uri="/struts-tags"%>
3<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4<html>
5 <head>
6 <title>Converter</title>
7 </head>
8
9 <body>
10 <s:form action="HelloWorld" theme="simple">
11 <%
12 // name="loc" 是LoginAction.java中的private Locale loc = Locale.CHINA;
13 %>
14 Locale:<s:textfield name="loc" />
15 <br>
16 <s:submit />
17 </s:form>
18 <br>
19 <h2>
20 <s:property value="msg" />
21 </h2>
22 </body>
23</html>
24
WebRoot/submit.jsp
1<%@page contentType="text/html; charset=GBK"%>
2<%@taglib prefix="s" uri="/struts-tags"%>
3
4<html>
5 <head>
6 <title>submit</title>
7 </head>
8 <!-- 提交页面,页面信息为Action中的集合属性 -->
9 <body>
10 <!-- 错误提示层(错误显示信息), s:fielderror会自动检测页面中所有域(输入框等)中的错误信息-->
11 <div style="color: red">
12 <s:fielderror></s:fielderror>
13 </div>
14 <s:form action="ProductConfirm" theme="simple">
15 <table>
16 <tr style="background-color: powderblue; font-weight: bold;">
17 <td>
18 Product Name
19 </td>
20 <td>
21 Price
22 </td>
23 <td>
24 Date of Production
25 </td>
26 </tr>
27 <%
28 //1.s:iterator:使用迭代器
29 //2.value="new int[3]" status="stat":整形数组集合对应action中的List集合;每次取出一个值存入stat中
30 //3. products['+#stat.index+'].name:OGNL表达式,相当于<%= "products[" + stat.index + "].name" %>
31 // (1)products对应action(ProductConfirm.java)中的 products属性,
32 // (2)整个句子的作用是从action中找到products并取出products的name属性
33 // (3)规范表达式:%{Action 中的属性集合[整数数组的迭代取值].具体pojo类的属性}
34 %>
35
36 <s:iterator value="new int[3]" status="stat">
37 <tr>
38 <td>
39 <s:textfield name="%{'products['+#stat.index+'].pname'}" />
40 </td>
41 <td>
42 <s:textfield name="%{'products['+#stat.index+'].price'}" />
43 </td>
44 <td>
45 <s:textfield name="%{'products['+#stat.index+'].pdate'}" />
46 </td>
47 </tr>
48 </s:iterator>
49 <tr>
50 <td colspan="3">
51 <s:submit />
52 </td>
53 </tr>
54 </table>
55 </s:form>
56 </body>
57</html>
58
WebRoot/show.jsp
1<%@ page contentType="text/html; charset=GBK"%>
2<%@taglib prefix="s" uri="/struts-tags"%>
3<html>
4 <head>
5 <title>show</title>
6 </head>
7 <!-- 显示页面,显示Action中的集合属性 -->
8 <body>
9 <table>
10 <tr style="background-color: powderblue; font-weight: bold;">
11 <td>
12 Product Name
13 </td>
14 <td>
15 Price
16 </td>
17 <td>
18 Date of Production
19 </td>
20 </tr>
21 <!-- s:iterator value="products" status="stat":与提交页面submit.jsp相同 -->
22 <s:iterator value="products" status="stat">
23 <tr>
24 <td>
25 <s:property value="pname" />
26 </td>
27 <td>
28 $
29 <s:property value="price" />
30 </td>
31 <td>
32 <s:property value="pdate" />
33 </td>
34 </tr>
35 </s:iterator>
36 </table>
37 </body>
38</html>
39
src/com.action.LocaleConverter.java
1package com.action;
2
3import java.lang.reflect.Member;
4import java.util.Locale;
5import java.util.Map;
6
7/** *//**
8 * @author ∪∩BUG E-mail: tidelgl@163.com
9 * @version Aug 24, 2008 4:29:04 PM
10 * @转换器类
11 */
12
13// 继承ognl默认的格式转换类
14public class LocaleConverter extends ognl.DefaultTypeConverter {
15
16 @Override
17 // Map context:上下上下文对象; Object value:待转换对象; Class toType:目标类型
18 public Object convertValue(Map context, Object value, Class toType) {
19
20 // 如果要转换的是本地化类型Locale.class(如整形:Integer.class)
21 if (toType == Locale.class) {
22
23 // 把待转换类型强制转换成字符串类型,并取第一个元素
24 String locale = ((String[]) value)[0];
25
26 // 截取字符串去掉"_";如果zh_CN截取得(zh,CN)
27 return new Locale(locale.substring(0, 2), locale.substring(3));
28 }
29 // 转换成字符串类型
30 else if (toType == String.class) {
31
32 Locale locale = (Locale) value;
33 return locale.toString();
34 }
35
36 return null;
37 }
38}
src/com.action.LoginAction.java
1package com.action;
2
3import java.util.Locale;
4
5import com.opensymphony.xwork2.ActionSupport;
6import com.opensymphony.xwork2.util.LocalizedTextUtil;
7
8/** *//**
9 * @author ∪∩BUG E-mail: tidelgl@163.com
10 * @version Aug 24, 2008 4:11:04 PM
11 * @Action 类
12 */
13@SuppressWarnings("serial")
14public class LoginAction extends ActionSupport {
15
16 private String msg;
17 private Locale loc = Locale.CHINA; //默认语言版本的中文
18
19 public LoginAction() {
20 super();
21 // TODO Auto-generated constructor stub
22 }
23
24 public LoginAction(String msg, Locale loc) {
25 super();
26 this.msg = msg;
27 this.loc = loc;
28 }
29
30 @Override
31 public String execute() throws Exception {
32
33 //LocalizedTextUtil是struts2.0中的国际化初始化工具,
34 //获取当前资源文件中的名为HelloWorld的key,然后使用loc语言版本
35 msg = LocalizedTextUtil.findDefaultText("HelloWorld", loc);
36 return SUCCESS;
37 }
38
39 public String getMsg() {
40 return msg;
41 }
42
43 public void setMsg(String msg) {
44 this.msg = msg;
45 }
46
47 public Locale getLoc() {
48 return loc;
49 }
50
51 public void setLoc(Locale loc) {
52 this.loc = loc;
53 }
54}
55
src/com.action.ProductConfirm.java
1package com.action;
2
3import java.util.List;
4
5import com.opensymphony.xwork2.ActionSupport;
6import com.pojo.Product;
7
8/** *//**
9 * @author ∪∩BUG E-mail: tidelgl@163.com
10 * @version Aug 24, 2008 9:58:06 PM
11 * @Action类 测试页面的提交功能
12 */
13@SuppressWarnings("serial")
14public class ProductConfirm extends ActionSupport {
15
16 // 标准list集合
17 private List<Product> products;
18
19 public List<Product> getProducts() {
20 return products;
21 }
22
23 public void setProducts(List<Product> products) {
24 this.products = products;
25 }
26
27 @Override
28 public String execute() throws Exception {
29 //遍历products列表
30 for (Product p : products) {
31 System.out.println(p.getPname() + "|" + p.getPrice() + "|"
32 + p.getPdate());
33 }
34 return SUCCESS;
35 }
36}
37
src/com.pojo.Product.java
1package com.pojo;
2
3
4import java.io.Serializable;
5import java.util.Date;
6
7/** *//**
8 * @author ∪∩BUG E-mail: tidelgl@163.com
9 * @version Aug 24, 2008 9:51:03 PM
10 * @自定义数据类型
11 */
12@SuppressWarnings("serial")
13public class Product implements Serializable {
14
15 //String,double,Date数据类型系统都内置有他们的转换器,无需另写转换器
16 private String pname;
17 private double price;
18 private Date pdate;
19
20 public Product() {
21
22 }
23
24 public String getPname() {
25 return pname;
26 }
27
28 public void setPname(String pname) {
29 this.pname = pname;
30 }
31
32 public double getPrice() {
33 return price;
34 }
35
36 public void setPrice(double price) {
37 this.price = price;
38 }
39
40 public Date getPdate() {
41 return pdate;
42 }
43
44 public void setPdate(Date pdate) {
45 this.pdate = pdate;
46 }
47
48 public Product(String pname, double price, Date pdate) {
49 super();
50 this.pname = pname;
51 this.price = price;
52 this.pdate = pdate;
53 }
54
55}
56
src/com.action.ProductConfirm-conversion.properties
ProductConfirm-conversion.properties //固定格式Action名-conversion.properties
Element_products=com.pojo.Product //表明products的转换类型是Product,固定格式添加:Element_集合属性名=集合对象的实现类
Element_products=com.pojo.Product
src/xwork-conversion.properties
xwork-conversion.properties //全局转换配置文件,必须放在SRC目录下,文件名固定!
java.util.Locale = com.action.LocaleConverter //自动调用com.action.LocaleConverter来转换
java.util.Locale =com.action.LocaleConverter
src/struts.properties
struts.custom.i18n.resources=globalMessages
src/globalMessages_en_US.properties
HelloWorld=HelloWorld
failtip={0}Login failed\!
language=Select language
smg=Now is{0}
succtip={0}Welcome,Login success.
usen=Americal English
zhcn=Simplified Chinese
src/globalMessages_zh_CN.properties
HelloWorld=\u4F60\u597D
failtip={0}\u767B\u5F55\u5931\u8D25
language=\u9009\u62E9\u8BED\u8A00
smg={0}\u73B0\u5728\u7684\u4E8B\u4EF6\u662F{1}
succtip={0}\u6B22\u8FCE,\u767B\u5F55\u6210\u529F
usen=\u82F1\u8BED
zhcn=\u4E2D\u6587
src/struts.xml
1<?xml version="1.0" encoding="GBK"?>
2<!DOCTYPE struts PUBLIC
3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
4 "http://struts.apache.org/dtds/struts-2.0.dtd">
5<struts>
6 <include file="struts-default.xml" /><!-- 使用缺省的struts的配置文件 -->
7
8 <!-- 包空间 ConverterDemo 继承 struts-default -->
9 <package name="ConverterDemo" extends="struts-default">
10
11 <!-- 映射名name="HelloWorld" 与 index.jsp 中的 action="HelloWorld" 对应,使用com.action.LoginAction来实现 -->
12 <action name="HelloWorld" class="com.action.LoginAction">
13 <result>/index.jsp</result>
14 </action>
15 <!--
16 1.映射名name="ProductConfirm" 与 submit.jsp 中的 action="ProductConfirm" 对应,使用com.action.ProductConfirm来实现
17 2.成功转到show.jsp页面
18 3.失败转入submit.jsp页面
19 -->
20 <action name="ProductConfirm"
21 class="com.action.ProductConfirm">
22 <result>/show.jsp</result>
23 <result name="input">/submit.jsp</result>
24 </action>
25 </package>
26</struts>
27
28