Struts 2框架的大致处理流程如下:
浏览器发送请求,例如请求/mypage.action、/reports/myreport.pdf等。
核心控制器FilterDispatcher根据请求决定调用合适的Action。
WebWork的拦截器链自动对请求应用通用功能,例如workflow、validation或文件上传等功能。
回调Action的execute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作,既可以是将数据保存到数据库,也可以从数据库中检索信息。实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求。
Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,既支持JSP,也支持Velocity、FreeMarker等模板技术。
struts2 标签的使用之二 s:iterator
struts2的s:iterator 可以遍历 数据栈里面的任何数组,集合等等 以下几个简单的demo:
s:iterator 标签有3个属性:
value:被迭代的集合
id :指定集合里面的元素的id
status 迭代元素的索引
1:jsp页面定义元素写法 数组或list
2:索引的用法
如果指定了status,每次的迭代数据都有IteratorStatus的实例,它有以下几个方法
int getCount()返回当前迭代了几个元素
int getIndex()返回当前元素索引
boolean isEven()当然的索引是否偶数
boolean isFirst()当前是否第一个元素
boolean isLast()
boolean isOdd()当前元素索引是否奇数
3:遍历map
value可以直接定义为:
每个元素以都好隔开。元素之间的key和value 冒号隔开
value也可以是数据栈里面的java.util.Map对象
遍历写法如下:
当然key 和value 都可以使java 的 Object
3:遍历数据栈.简单的List类,
List<Attr>
class Attr{String attrName;String getAttrName(){return "123";}}
当然value 还可以写成 value="%{label}" label可以有.操作
label的属性List 可以写成value="%{label.list}" 相当于:getLabel().getList();
4:遍历2个list;
List<AttrName> attrN {color,size,style}
List<AttrValue> attrV {red,20,gay}
这2个list的元素是一一对应的,一个attrN对应一个attrV
源文档 <http://blog.csdn.net/chinajust/article/details/3922760>
<!-- 类别 -->
<s:iterator value="categories">
<div id="left_x">
<div id="left122">
<table
style="float: left; height: auto; width: 678px; vertical-align: middle;">
<tr>
<td class="word14" style="width: 22px; padding-left: 10px;">
<s:property value="name" />
</td>
<td style="padding-bottom: 3px;">
<div id="left122_y">
<!-- 二级 -->
<s:if test="!children.isEmpty">
<s:iterator value="children">
<div
style="white-space: nowrap; width: 28%; float: left; margin-top: 5px; margin-bottom: 5px; ">
<b style="color: #990000;"><s:property value="name"
escape="false" /> </b>
<!-- 三级 -->
<s:if test="!children.isEmpty">
<span> <s:iterator value="children">
<s:a action="product_getByCategoryId"
namespace="/product">
<s:param name="category.id" value="id"></s:param>
<s:property value="name" escape="false" />
</s:a>
</s:iterator> </span>
</s:if>
</div>
</s:iterator>
</s:if>
<br/>
</div>
</td>
</tr>
</table>
</div>
</div>
</s:iterator>
s:property 用法
OGNL:Object Graph Navigation Language(对象图导航语言)
1,访问Action值栈中的普通属性:
<s:property value="attrName"/>
2,访问Action值栈中的对象属性(要有get set方法):
<s:property value="obj.attrName"/>
<s:property value="obj1.obj2.attrName"/>
3,访问值栈中对象属性的方法
<s:property value="obj.methodName()"/>
4,访问值栈中action的普通方法:
<s:property value="methodName()"/>
5,访问静态方法:
<s:property value="@com.softeem.LoginAction@methodName()"/>
6,访问静态属性:
配置属性文件,允许ognl访问静态方法struts.ognl.allow...=true
<s:property value="@com.softeem.LoginAction@attrName"/>
7,访问Math类的静态方法:
<s:property value="@@min(9,7)"/>
8,访问普通类的构造方法:
<s:property value="new com.softeem.User(2)"/>
9,访问集合:
①list集合对象
<s:property value="listName"/>
②list集合中的某个元素
<s:property value="listName[1]"/>
③list中某个属性的集合
<s:property value="listName.{field}"/>
④list中某个属性集合的特定值
<s:property value="listName.{field}[0]"/>
⑤访问set
<s:property value="setName"/>
⑥访问set中某个元素
<s:property value="setName[0]"/>
⑦访问map
<s:property value="mapName"/>
⑧根据key访问Map中的元素
<s:property value="mapName.username"/>
<s:property value="mapName['username']"/>
<s:property value="mapName[/"username/"]"/>
⑨访问map中所有的key
<s:property value="mapName.keys"/>
10,访问map中所有的values
<s:property value="mapName.values"/>
11,访问map的大小
<s:property value="mapName.size()"/>
12,投影
<s:property value="listName.{?#this.age==1}"/>
<s:property value="listName.{^#this.age>1}"/>
<s:property value="listName.{$#this.age==1}"/>
<s:property value="listName.{$#this.age==1}.{age}==null"/>
[]:<s:property value="[0]"/>值栈中的对象
---------------------------------------
访问action中传过来的对象:<s:property value="user"/>|${user }<br>
访问action中传过来的对象中的属性:<s:property value="user.username"/>|${user.username }<br>
访问action中传过来的对象属性类中的方法:<s:property value="user.getUsername()"/><br>
访问action中传过来的对象中的对象:<s:property value="user.group"/><br>
访问action中传过来的对象中的对象的属性:<s:property value="user.group.gname"/> |
<s:property value="user.group.getGname()"/><br>
访问action中的普通方法:<s:property value="getValue()"/><br>
访问其他类中过的静态方法:<s:property value="@com.softeem.pojos.User@printUser()"/><br>
取到Math类中的方法:<s:property value="@@max(12,45)"/><br>
访问User类的构造方法:<s:property value="new com.softeem.pojos.User()"/><br>
访问list:<s:property value="users"/><br>
获取list的长度:<s:property value="users.size()"/><br>
取到list中第一个元素:<s:property value="users.get(0)"/>|<s:property value="users[1]"/><br>
取到list中username属性的集合:<s:property value="users.{username}"/><br>
根据key取到map中的元素:<s:property value="userMap.张三"/>|
<s:property value="userMap['三毛']"/><br>
⑨访问map中所有的key:<s:property value="userMap.keys"/><br>
10,访问map中所有的values:<s:property value="userMap.values"/><br>
11,访问map的大小:<s:property value="userMap.size()"/><br>
12,投影:<s:property value="users.{?#this.username=='张三'}.{password}"/><br>
13,取到list中满足条件的开头的一个元素的密码:<s:property value="users.{?#this.username='张三'}.{password}[0]"/><br>
14,取到list中满足条件的最后的一个元素的密码:<s:property value="users.{$#this.username='张三'}.{password}"/><br>
15,<s:property value="users.{$#this.username=='admin'}.{group}==null"/><br>
16,从栈顶开始取,一直取到指定的位置(0表示栈底):<s:property value="[1]"/>
<s:debug></s:debug>
源文档 <http://blog.csdn.net/lfp0202/article/details/6188484>
s:form
<s:a action="customer_login" namespace="/customer">
<img src="${context_path}/css/images/index_23.gif" class="imgx5" />
</s:a>
s:action
<s:action name="product_findBySellCount" namespace="/product" executeResult="true"></s:action>
public String findBySellCount() throws Exception {
Map<String, String> orderby = new HashMap<String, String>();
orderby.put("sellCount", "desc");
pageModel = productDao.find(1, 6, orderby);
return "findList";-
}
<s:a action="product_getByCategoryId" namespace="/product">
<s:param name="category.id" value="'22'"></s:param>
s:set context_path ctx
<s:set var="context_path"
value="#request.get('javax.servlet.forward.context_path')"></s:set>
s:if session
<s:if test="#session.customer != null">
欢迎 <s:property value="#session.customer.username" />
<s:a action="customer_logout" namespace="/customer">退出</s:a>
</s:if>
s:submit
<s:submit type="image" src="%{context_path}/css/images/index_09.gif"
value="搜索"></s:submit>