转载 struts标签之logic手册

本文详细解析了Struts2框架中的逻辑标签,包括迭代、条件判断、消息处理、跳转等功能,通过实例展示了如何使用这些标签进行页面逻辑控制。

logic:iterate
logic:iterate
标签用来迭代集合,您可以使用如下方式来为这个标签指定其要叠代的集合:
使用一个运行时表达式,这个表达式的值是一个集合。 name属性引用一个JSP Bean,这个JSP Bean本身就是一个集合。 name属性引用一个JSP Bean,这个JSP Bean的一个属性是一个集合,这时可以联合使用property来指定这个集合。 上面所提到的集合可以是:
对象类型或原子类型的数组(Array)
java.util.Collection
的实现,包括ArrayListVector
java.util.Enumeration
的实现。
java.util.Iterator
的实现。
java.util.Map
的实现,包括HashMapHashtableTreeMap 如果您叠代的集合中含有null的值,这时需要采取一定的措施,因为这时logic:iterate不会在page作用域中创建对象。一般是使用标签或标签来判断一下。
下面是logic:iterate叠代ArrayList的示例的对象引用关系和部分代码:

图示 3. logic:iterate中对象的引用关系
图中的persons列表是在ListAction中填充的,在这里只是简单的加入了三个Person对象,在实际的应用中这些数据应该取自数据库。具体的代码如下:

public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

ListForm listForm = (ListForm) form;

List persons = new ArrayList();

Person person1 = new Person();
person1.setId("00001");
person1.setName("
赵辰");

Person person2 = new Person();
person2.setId("00002");
person2.setName("
李为芳");

Person person3 = new Person();
person3.setId("00003");
person3.setName("
王微");

persons.add(person1);
persons.add(person2);
persons.add(person3);

listForm.setPersons(persons);

return mapping.findForward("success");
}
标签输出的结果为:

00001--&gt
赵辰
00002--&gt
李为芳
00003--&gt
王微
回页首
logic:present
如果指定的值出现该标签就会创建其标签体内的内容。该标签用于以下情况:
检查具有指定名称的cookie是否出现。 检查具有指定名称的header是否出现。 检查具有指定名称的JSP Bean是否出现 检查具有指定名称的JSP Bean中的property属性是否出现。 检查request中指定名称的参数是否出现。 检查当前的认证用户是否与指定的安全角色相关联。 检查当前认证的主体是否具有指定的名字。 下面的代码示例了logic:present标签检查具有指定名称User-Agentheader是否出现:


您的浏览器是




logic:notPresent
标签的应用正好和logic:present标签相反。
回页首
logic:messagesPresent
logic:messagesPresent
标签用于以下情况:
request作用域中存在一个ActionMessages对象,标签的property属性和ActionMessages中的property对应。 request作用域中存在一个ActionErrors对象,标签的property属性和ActionErrors中的property对应。 存在一个String对象,将其转换(构造)ActionMessage然后在添加到ActionMessages中。 存在一个String Array对象,将数组中的每一个String转换成一个ActionMessage,在将其添加到ActionMessages中。 标签的message属性值为true时将以Globals.MESSAGE_KEYkeyrequest作用域中查找Message,其它情况下,将name的值作为key查找,如果name 没有出现,默认值为Globals.ERROR_KEY
下面的代码示例了logic:messagesPresent标签的典型用法:








标签logic:messagesNotPresent的应用正好和logic:messagesPresent的应用相反。
回页首
logic:empty
logic:empty
标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
Java对象为null String对象为"" java.util.Collection对象中的isEmpty()返回true java.util.Map对象中的isEmpty()返回true 下面的代码示例了logic:empty标签判断集合persons是否为空:


集合persons为空!



logic:notEmpty标签的应用正好和logic:empty标签相反。
回页首
logic:match
logic:match
标签用来处理子串匹配问题。
如果指定的值匹配该标签就会创建其标签体内的内容。该标签用于以下情况:
检查具有指定名称的cookie是否与该标签的value匹配。 检查具有指定名称的header是否与该标签的value匹配。 检查具有指定名称的JSP Bean是否与该标签的value匹配 检查具有指定名称的JSP Bean中的property属性值是否与该标签的value匹配。 检查request中指定名称的参数值是否与该标签的value匹配。
下面的代码示例了logic:match标签的典型用法:



MS IE 6.0



logic:notMatch
标签的应用正好和logic:match标签相反。
回页首
logic:equal
这里要介绍的不只是logic:equal(=)标签,而是要介绍一类标签,这类标签完成比较运算,包括:

logic:equal(=)
logic:notEqual(!=)
logic:greaterEqual(>=)
logic:lessEqual(<=)
logic:graterThan(>)
logic:lessThan(该类标签的用法类似,我们只介绍logic:equal标签,其它的留给您自己去完成。

logic:equal
是用来判断是否相等的。如果相等,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
比较由该标签的cookie属性指定的cookie的值是否与该标签的value属性值相等。 比较由该标签的header属性指定的header的值是否与该标签的value属性值相等。 比较由该标签的name属性指定的JSP Bean是否与该标签的value属性值相等(property属性不出现)或比较由该标签的name属性指定的JSP Bean中的property属性值是否与该标签的value属性值相等。 比较由该标签的parameter属性指定的参数值(request)是否与该标签的value属性值相等。 回页首
logic:forward
我觉得将forwardredirect这两个动作放到一起对比着介绍更加有利于理解,基于此原因也就将logic:forwardlogic:redirect这两个标签也拿到这里一起介绍了。
让我们看看这两个动作的区别:

forward
是在servlet内部执行,浏览器完全不会感知到这个动作,原始的url也不会改变,浏览器重新装载的话也只是对原始的请求进行简单的重复。
redirect
则分成两个步骤:第一步是web应用程序告诉浏览器第二个url,然后浏览器向第二个url发送请求。

redirect
forward慢,因为浏览器要做二次请求。还有就是要注意,在第一次的请求作用域(request作用域)内的bean对于第二次请求是不可见的。
理解了上面描述的区别也就知道了什么时候该选用logic:forward标签什么时候该选用logic:redirect标签了。logic:forward标签完成PageContext.forward()HttpServletResponse.sendRedirect(),如何选择由控制器决定。logic:redirect标签完成HttpServletResponse.sendRedirect()
在使用logic:redirect标签时我们可以向使用html:link一样构造baseurlquery参数。如果您感兴趣可以参考html:link标签。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/694276/viewspace-51410/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/694276/viewspace-51410/

我就是靠这个文档实现logic:iterate的循环的<br>struts 标签 logic:iterate使用 logic:iterate<br><br>第一页 是struts官方的说明,<br>第二页 是个例子<br>第三页 是我实现的arrayList放入标签的方法。<br>这是页面文件<br><%@ page language="java"<br> import="java.util.*,cn.edu.bit.zgc2d.accountQuery.*" pageEncoding="GBK"%><br><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"<br> prefix="bean"%><br><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"<br> prefix="html"%><br><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"<br> prefix="logic"%><br><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br><html><br> <head><br> </head><br> <body><br> <table><br> <tr><br> <td><%@ include file="../menu.txt"%><br> </td><br> </tr><br> </table><br> <table width=800><br> <tr><br> <td height=100 width=30><br> <img src=../images/small_2.gif><br> </td><br> <td><br> 账务查询<br> <br><br> 基本信息查询。<br> </td><br> </tr><br> </table><br> <table width=800><br> <tr><br> <td height=1 width=700 bgcolor=gray colspan=2></td><br> </tr><br> </table><br> <table width=800><br> <tr><br> <td height=100 width=30><br> <img src=../images/small_2.gif><br> </td><br> <td><br> 基本信息查询。<br> </td><br> </tr><br> </table><br> <table><br> <tr><br> <td WIDTH=100 bgcolor=#bfbfbf><br> 帐号<br> </td><br> <td WIDTH=100 bgcolor=#bfbfbf><br> 帐户别名<br> </td><br> <td WIDTH=100 bgcolor=#bfbfbf><br> 是否为主帐户<br> </td><br> </tr><br> <logic:iterate id="item" name="list" indexId="index"><br> <tr><br> <td WIDTH=100 bgcolor=F2F2F2><br> <a href="www.sina.com.cn?abc=<bean:write name="item" property="account" />"><bean:write name="item" property="account" /><br> </td><br> <td WIDTH=100 bgcolor=F2F2F2><br> <bean:write name="item" property="other_name" /><br> </td><br> <td WIDTH=100 bgcolor=F2F2F2><br> <bean:write name="item" property="is_main_account" /><br> </td><br> </tr><br> </logic:iterate><br> </table><br> </body><br></html><br>这是action<br>public class InformationAction extends Action {<br> public ActionForward execute(ActionMapping mapping, ActionForm form,<br> HttpServletRequest request, HttpServletResponse response) {<br> InformationForm informationForm = (InformationForm) form;// TODO Auto-generated method stub<br> //业务开始<br> Connection conn = null; Statement st = null; ResultSet rs = null;<br> try {<br> db db = new db();<br> // 打开数据库<br> conn = db.conn();<br> // 创建st<br> st = conn.createStatement();<br> // 组织sql并执行<br> HttpSession session_account = request.getSession();<br> String account = (String) session_account.getAttribute("account");<br> String sql = "select * from account where main_account=" + account<br> + "order by is_main_account desc";<br> rs = st.executeQuery(sql);<br> // 组建arrayList列表<br> ArrayList list = new ArrayList();<br> while (rs.next()) {<br> accountBean bean = new accountBean();<br> bean.setArea(rs.getString("area")); bean.setKind(rs.getInt("kind")); bean.setAccount(rs.getString("account")); bean.setMain_account(rs.getString("main_account")); bean.setType(rs.getInt("type")); bean.setOther_name(rs.getString("other_name")); bean.setPassword(rs.getString("password")); bean.setIs_main_account(rs.getInt("is_main_account")); bean.setMoney(rs.getString("money")); bean.setId(rs.getInt("id"));<br> list.add(bean);<br> }<br> HttpSession session = request.getSession();<br> session.setAttribute("list", list);<br> return mapping.findForward("success");<br> } catch (Exception e) { e.printStackTrace(); } <br> //业务结束<br> return null;<br> }<br>}//自己将需要的包导入<br>bean文件<br>package cn.edu.bit.zgc2d.accountQuery;<br><br>public class accountBean {<br> private String area;<br> private int kind;<br> private String account;<br> private String main_account;<br> private int type;<br> private String other_name;<br> private String password;<br> private int is_main_account;<br> private String money;<br> private int id;<br> public String getArea() {<br> return area;<br> }<br> public void setArea(String area) {<br> this.area = area;<br> }<br> public int getKind() {<br> return kind;<br> }<br> public void setKind(int kind) {<br> this.kind = kind;<br> }<br> public String getAccount() {<br> return account;<br> }<br> public void setAccount(String account) {<br> this.account = account;<br> }<br> public String getMain_account() {<br> return main_account;<br> }<br> public void setMain_account(String main_account) {<br> this.main_account = main_account;<br> }<br> public int getType() {<br> return type;<br> }<br> public void setType(int type) {<br> this.type = type;<br> }<br> public String getOther_name() {<br> return other_name;<br> }<br> public void setOther_name(String other_name) {<br> this.other_name = other_name;<br> }<br> public String getPassword() {<br> return password;<br> }<br> public void setPassword(String password) {<br> this.password = password;<br> }<br> public int getIs_main_account() {<br> return is_main_account;<br> }<br> public void setIs_main_account(int is_main_account) {<br> this.is_main_account = is_main_account;<br> }<br> public String getMoney() {<br> return money;<br> }<br> public void setMoney(String money) {<br> this.money = money;<br> }<br> public int getId() {<br> return id;<br> }<br> public void setId(int id) {<br> this.id = id;<br> }<br>}<br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值