1: #status.odd == true 判断遍历的奇数行
2: 如果一个list里面只有一个属性的话,页面显示直接用<s:property />,不管是只存整形或者字符串
国际化:
<s:i18n name="ApplicationMessages">
<s:text name="HelloWorld" />
</s:i18n>
3: Struts2引入文件 <include file="struts-default.xml"/>
4: Action要继承extends ActionSupport
诸如属性只需要 setter和getter方法就可以直接用属性了
5:映射Action类
<package name="tutorial" extends="struts-default">
<action name="HelloWorld" class="tutorial.HelloWorld">
<result>HelloWorld.jsp</result>
</action>
</package>
Struts 2.0有两个配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。
1、struts.xml用于应用程序相关的配置
2、struts.properties用于Struts 2.0的运行时(Runtime)的配置
Struts 2默认会读取classpath下的struts-default.xml,struts-plugin.xml,struts.xml这三个文件。
6:使用Struts2标记,需要引入文件
<%@taglibprefix="s"uri="/struts-tags"%>
7:常用UI标记:
<s:set name="name" value= "#request.token"/>
<s:iterator value="#request.names" status="stuts">
<s:property value ="#request.xxx">注意如果List里面只包含一个属性迭代显示<s:property/>
8:常用逻辑标志
<s:if test="#request.xxx==xxx"> // </s:if> <s:elseif></elseif> <s:else></s:else>
9:include
<s:include value="/condition.jsp">
<s:param name="name">Max</s:param> // 可以引入一个JSP或者Servlet
</s:include>
10:param
<param name="color">blue</param><!--字符串方式参数值以String的格式放入statck.-->
<param name="color" value="blue"/><!--对象方式该值会以Object的格式放入statck -->
11:URL
<a href='<s:url value="/i18n.jsp" />'>18n</a>
<s:url id="url" value="/condition.jsp"> <s:param name="name" value = "Max"/></s:url>定义url
<s:a href="%{url}">if\elseif\else</s:a>
更多的UI请见:http://wiki.javascud.org/display/ww2cndoc/TagsWebWork2文档中文化计划(中文)
11:<result type="velocity">/HelloWorld.vm</result>
激动人心的地方在于它可以把Action输出到velocity,JasperReports和Freemarker等模板,而不仅可以做转发和重定向
12:Action 取消了Form取而代之的是属性的setter和getter方法
还有更高级的是它可以在Action里面定义POJO,页面直接PO.getName().PO.getPassword()之类的操作
13:作用域对象的获取
非Ioc方式获取:ServletActionContext.getRequest()-->request 类似。。。。
Ioc方式获取:定义HttpServletRequest属性setter和getter方法。
14:一个属性如果有setter和getter方法的话可以<s:property value="message" escape="false"/>
15:多个对象,同样的POJO提交问题
比如存储产品对象,首先要继承ActionSupport public List<Product> products;
输入: %{} 表示使用ONGL表达式 ,比如像同时提交三个产品的话
<s:iteratorvalue="new int[3]" status="stat">
<s:textfieldname="%{'products['+#stat.index+'].name'}"/> <s:textfieldname="%{'products['+#stat.index+'].price'}"/> <s:textfieldname="%{'products['+#stat.index+'].dateOfProduction'}"/>
</s:iterator>
16:转换错误处理
17:<!--此标志的作用是引入Struts 2.0的常用的Javascript和CSS--> <s:head/>
18:拦截器:
struts2-all-2.0.1.jar或struts2-core-2.0.1.jar包的struts-default.xml定义啦很多的拦截器
包里面会有冲突
使用默认的拦截器首先<include file="struts-default.xml" />
定义Action的时候<interceptor-ref name="xx" />
19
<s:iteratorvalue="books.{?#this.price > 35}">
<s:propertyvalue="title" /> - $<s:propertyvalue="price" />
</s:iterator>
<s:propertyvalue="books.{?#this.title=='Code Complete, Second Edition'}.{price}[0]"/>