Struts之logic标签库详解(转载)

1. logic:empty logic:empty标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:当Java对象为null时当String对象为””时当java.util.Collection对象中的isEmpty()返回true时当java.util.Map对象中的isEmpty()返回true时下面的代码示例了logic:empty标签判断集合persons是否为空:<logic:empty property = “persons”><div>集合persons为空!</div> </logic:empty> 2. logic:notEmpty该标签的应用正好和logic:empty标签相反。3. logic:equal该标签为等于比较符。eg1. 比较用户的状态属性是否1,若为1,输出”启用”;eg2. 如果上例中的value值是动态获得的,例如需要通过bean:write输出,因struts不支持标签嵌套,可采用EL来解决该问题。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属性值相等。4. logic:notEqual该标签意义与logic:equal相反,使用方法类似,略。5. logic:forward该标签用于实现页面导向,查找配置文件的全局forward。struts-config.xml文件中全局转向eg. <logic:forward/>6. logic:greaterEqual为大于等于比较符。eg. 当某学生的成绩大于等于60时,输出“及格”:<logic:greaterEqual property=”scores” value=”60″>及格</logic:greaterEqual>7. logic:greaterThan此为大于比较符,使用方法同logic:greaterEqual;8. logic:lessEqual此为小于等于比较符,使用方法同logic:greaterEqual;9. logic:lessThan此为小于比较符,使用方法同logic:greaterEqual;10. logic:match此标签比较对象是否相等;logic:match标签用来处理子串匹配问题。如果指定的值匹配该标签就会创建其标签体内的内容。该标签用于以下情况:检查具有指定名称的cookie是否与该标签的value匹配。检查具有指定名称的header是否与该标签的value匹配。检查具有指定名称的JSP Bean是否与该标签的value匹配 或 检查具有指定名称的JSP Bean中的property属性值是否与该标签的value匹配。检查request中指定名称的参数值是否与该标签的value匹配。下面的代码示例了logic:match标签的典型用法:eg0.<logic:present header=”User-Agent”> <logic:match header=”User-Agent” value=”MSIE 6.0″> MS IE 6.0 </logic:match></logic:present> eg1. 检查在request范围内的name属性是否包含”hello”串:<logic:match scope=”request” value=”hello”> <bean:write/>中有一个“hello”串。</logic:match>eg2. 检查在request范围内的name属性是否已“hello”作为起始字符串:<logic:match scope=”request” value=”hello” location=”start”> <bean:write/>以“hello”作为起始字符串。</logic:match>eg3.<logic:match header=”user-agent” value=”Windows”> 你运行的是Windows系统</logic:match> 11. logic:notMatchlogic:notMatch标签的应用正好和logic:match标签相反。此标签用于比较对象是否不相同,与logic:match意义相反,使用方法类似12. logic:messagePresent该标签用于判断ActionMessages/ActionErrors对象是否存在;logic:messagesPresent标签用于以下情况:在request作用域中存在一个ActionMessages对象,标签的property属性和ActionMessages中的property对应。在request作用域中存在一个ActionErrors对象,标签的property属性和ActionErrors中的property对应。存在一个String对象,将其转换(构造)成ActionMessage然后在添加到ActionMessages中。存在一个String Array对象,将数组中的每一个String转换成一个ActionMessage,在将其添加到ActionMessages中。标签的message属性值为true时将以Globals.MESSAGE_KEY为key在request作用域中查找Message,其它情况下,将name的值作为key查找,服务器空间,如果name 没有出现,默认值为Globals.ERROR_KEY。下面的代码示例了logic:messagesPresent标签的典型用法:eg1.<logic:messagesPresent><ul><html:messages> <li><bean:write/></li></html:messages></ul></logic:messagesPresent> eg2. 如果存在error信息,将其全部输出:<logic:messagePresent property=”error”> <html:messages property=”error” > <bean:write/> </html:messages></logic:messagePresent >13. logic:messagesNotPresent标签logic:messagesNotPresent的应用正好和logic:messagesPresent的应用相反。该标签用于判断ActionMessages/ActionErrors对象是否不存在,使用方法与logic:messagePresent类似 14. logic:present此标签用于判断request对象传递参数是否存在。如果指定的值出现该标签就会创建其标签体内的内容。该标签用于以下情况:检查具有指定名称的cookie是否出现。检查具有指定名称的header是否出现。检查具有指定名称的JSP Bean是否出现 或 检查具有指定名称的JSP Bean中的property属性是否出现。检查request中指定名称的参数是否出现。检查当前的认证用户是否与指定的安全角色相关联。检查当前认证的主体是否具有指定的名字。——————————————-eg1. user对象和它的name属性在request中都存在时,输出相应字符串:<logic:present property=”name”>user对象和该对象的name属性都存在</logic:present>eg2. 若有一个名字为“hello”的JavaBean,香港服务器,输出对应字符串:<logic:present >有一个名字为“hello”的JavaBean。</logic:present>eg3.<logic:present header=”user-agent”>we got a user-agent header.</logic:present>eg4.下面的代码示例了logic:present标签检查具有指定名称User-Agent的header是否出现:<logic:present header=”User-Agent”>您的浏览器是<bean:header/> <bean:write/>。<br/></logic:present> 15. logic:notPresent此标签用于判断request对象传递参数是否不存在,香港服务器,意义与了logic:present相反,使用方法类似。logic:notPresent标签的应用正好和logic:present标签相反。16. logic:iterator用于显示列表为collection的值(List ,ArrayList,HashMap等)。logic:iterate标签用来迭代集合,您可以使用如下方式来为这个标签指定其要叠代的集合:使用一个运行时表达式,这个表达式的值是一个集合。用name属性引用一个JSP Bean,这个JSP Bean本身就是一个集合。用name属性引用一个JSP Bean,这个JSP Bean的一个属性是一个集合,这时可以联合使用property来指定这个集合。上面所提到的集合可以是:对象类型或原子类型的数组(Array)。java.util.Collection的实现,包括ArrayList,Vector。java.util.Enumeration的实现。java.util.Iterator的实现。java.util.Map的实现,包括HashMap,Hashtable和TreeMap。如果您叠代的集合中含有null的值,这时需要采取一定的措施,因为这时logic:iterate不会在page作用域中创建对象。一般是使用<logic:present>标签或<logic:notPresent>标签来判断一下。下面是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<Person> persons = new ArrayList<Person>(); 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–>赵辰00002–>李为芳00003–>王微eg1. 逐一输出用户列表(empList)中用户的姓名:<logic:iterate> <bean:write property=”name”/><br></logic:iterate>eg2. 从用户列表中输出从1开始的两个用户的姓名<logic:iterate indexId=”index” offset=”1″ length=”2″> <bean:write/>.<bean:write property=”name”/><br></logic:iterate>eg3. logic:iterator标签的嵌套举例<logic:iterate indexId=”index”> <bean:write/>. <bean:write property=”name”/><br> <logic:iterate property=”addressList” length=”3″ offset=”1″> <bean:write/><br> </logic:iterate></logic:iterate>17. logic:redirect该标签用于实现页面转向,可传递参数。eg. <logic:redirect href=”http://www.javaeye.com”/> 18. logic:forward和logic:redirect的比较—————————————————————————————————————-将forward和redirect这两个动作放到一起对比着介绍更加有利于理解,基于此原因也就将logic:forward和logic: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一样构造baseurl和query参数。如果您感兴趣可以参考html:link标签。

转载来自:

在你成功地把自己推销给别人之前,你必须百

Struts之logic标签库详解(转载)

相关文章:

你感兴趣的文章:

标签云: