`

struts标签——logic

    博客分类:
  • java
 
阅读更多

logic:iterate

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中对象的引用关系

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-->王微

logic:present

如果指定的值出现该标签就会创建其标签体内的内容。该标签用于以下情况:

  • 检查具有指定名称的cookie是否出现。
  • 检查具有指定名称的header是否出现。
  • 检查具有指定名称的JSP Bean是否出现 或 检查具有指定名称的JSP Bean中的property属性是否出现。
  • 检查request中指定名称的参数是否出现。
  • 检查当前的认证用户是否与指定的安全角色相关联。
  • 检查当前认证的主体是否具有指定的名字。

下面的代码示例了logic:present标签检查具有指定名称User-Agent的header是否出现:

<logic:present header="User-Agent">
 您的浏览器是<bean:header id="userAgent" name="User-Agent"/>
 <bean:write name="userAgent"/>。<br/>
</logic:present>

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_KEY为key在request作用域中查找Message,其它情况下,将name的值作为key查找,如果name 没有出现,默认值为Globals.ERROR_KEY。

下面的代码示例了logic:messagesPresent标签的典型用法:

<logic:messagesPresent>
 <ul>
 <html:messages id="message">
 <li><bean:write name="message"/></li>
 </html:messages>
 </ul>
</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是否为空:

<logic:empty name="listForm" property = "persons">
 <div>集合persons为空!</div>   
</logic:empty>  

logic:notEmpty标签的应用正好和logic:empty标签相反。

logic:match

logic:match标签用来处理子串匹配问题。

如果指定的值匹配该标签就会创建其标签体内的内容。该标签用于以下情况:

  • 检查具有指定名称的cookie是否与该标签的value匹配。
  • 检查具有指定名称的header是否与该标签的value匹配。
  • 检查具有指定名称的JSP Bean是否与该标签的value匹配 或 检查具有指定名称的JSP Bean中的property属性值是否与该标签的value匹配。
  • 检查request中指定名称的参数值是否与该标签的value匹配。

 

下面的代码示例了logic:match标签的典型用法:

<logic:present header="User-Agent">
 <logic:match header="User-Agent" value="MSIE 6.0">
 MS IE 6.0
 </logic:match>
</logic:present>  

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

我觉得将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标签。

分享到:
评论

相关推荐

    myeclipse+struts实例——3

    在Struts框架中,控制器(Action)负责接收用户的请求,模型(Business Logic)处理业务逻辑,视图(JSP)展示结果,形成清晰的三层架构。 3. **Tomcat**:这是Apache软件基金会的开源Servlet容器,用于运行Java Web...

    Struts——an open-source MVC implementation

    - **JSP标签库**:Struts提供了丰富的标签库,如logic、bean和html标签,简化了JSP页面的编写,减少了硬编码。 **Struts的优势** 使用Struts框架的好处包括: 1. **代码组织结构清晰**:通过MVC分离,代码结构更...

    Struts标签库学习.rar

    首先,我们来看"Struts标签库学习——html篇.doc"。这个文档详细介绍了Struts HTML标签库,它是用于构建用户界面的标签集合。HTML标签库提供了与HTML表单元素交互的能力,如`&lt;html:text&gt;`、`&lt;html:password&gt;`、`...

    Struts——Menu示例教程

    在JSP中,可以使用Struts的标签库如logic:iterate或c:forEach遍历Menu对象,生成HTML代码来展示菜单。 5. **使用JSP标签渲染**:在JSP页面上,使用Struts的自定义标签或者EL表达式来渲染Menu。例如,可以使用条件...

    入门学习struts——合同管理系统

    4. **JSP和标签库**:视图层可能使用JSP(JavaServer Pages)技术,结合Struts的自定义标签库(如logic标签、bean标签等)来动态生成HTML页面。你需要理解JSP的脚本元素、EL(Expression Language)和JSTL(Java...

    J2EE项目实训——Struts框架技术.rar

    9. **标签库**:Struts提供了丰富的标签库,如logic、bean、html等,可以简化JSP页面的编写,提高可读性和可维护性。 10. **ActionServlet**:Struts框架的入口点是ActionServlet,它是Servlet的子类,负责解析请求...

    struts标签库

    - **模型(Model)**:在Struts中,模型由两部分组成——系统的内部状态和可以改变状态的操作(事务逻辑)。内部状态通常由ActionForm对象表示,而事务逻辑则封装在Action类中,或者在ActionForm的方法中,具体取决...

    Struts标记库.rar

    - 在JSP页面中引入Struts标签库,如`&lt;%@ taglib prefix="html" uri="/tags/html" %&gt;`。 - 使用Struts配置文件来定义动作映射和表单bean,以驱动标签的行为。 6. **最佳实践** - 尽量避免在JSP中写Java代码,利用...

    精通Struts--Java流行服务器、框架及工具整合应用

    6. **Struts标签库**:Struts提供了丰富的标签库,如logic标签、bean标签和html标签,它们简化了JSP页面的编写,提高了代码的可读性和可维护性。书中会详细解读这些标签的使用方法和应用场景。 7. **iBatis整合**:...

    struts1 练习代码

    Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它主要负责处理MVC...通过实践,开发者可以更好地学习如何配置`struts-config.xml`,编写Action类和ActionForm,以及如何在JSP页面上使用Struts标签。

    STRUTS1.2中文文档

    11. **Struts标签库**:Struts1.2提供了丰富的标签库,如logic标签、bean标签和html标签,使得在JSP页面中操作业务数据和控制流程变得更加简单。 通过深入学习这些Struts1.2的关键概念和机制,开发者能够更好地理解...

    Struts应用.doc

    - `&lt;%@taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%&gt;`:引入Struts Logic标签库。 - **HTML表单**:使用`&lt;html:form&gt;`标签定义了一个表单,通过`action`属性指定提交表单时的动作路径。此外,还使用了...

    Struts1 留言板!

    JSP页面可以通过Struts标签库(如logic:iterate、html:form等)与ActionForm和Action类进行交互。 5. **模型**:模型由Action类和相关的业务对象组成,负责处理业务逻辑和数据操作。 在留言板应用中,可能包含以下...

    Struts教程.doc

    10. **定制JSP标记**和**Struts标签库**:Struts TagLib提供了许多预定义的JSP标签,如logic标签进行条件逻辑,bean标签操作JavaBeans,fmt标签处理国际化和日期格式化,以及html标签用于创建表单元素。 11. **资源...

    利用Myeclipse开发struts应用程序

    打开`/WEB-INF/web.xml`文件,添加Struts的标签库定义,以便在JSP页面中使用Struts标签。添加以下代码到`&lt;/webapp&gt;`标签之前: ```xml &lt;taglib-uri&gt;/tags/struts-html&lt;/taglib-uri&gt; &lt;taglib-location&gt;/WEB-...

    struts1.2-jars.rar 所有jar包

    4. `struts-logic.jar`:提供了逻辑标签,如条件判断、循环等,用于增强JSP页面的功能。 5. `struts-tiles.jar`:Tiles框架,用于构建可重用的页面布局和组合组件,实现复杂的页面结构。 6. `struts-nested.jar`:...

    Struts编程实例源代码

    8. **Struts标签库**: - 提供了各种标签简化JSP页面开发,如、等。 9. **Struts 1与Struts 2的区别**: - Struts 2引入了更多现代特性,如拦截器、OGNL表达式语言,以及更丰富的标签库,使得开发更加便捷。 在...

    Struts_01源代码

    Struts提供了丰富的标签库,如html、bean、logic和nested等,它们简化了视图层的开发,使得开发者可以更专注于业务逻辑而不是页面细节。 4. **01_test_servlet**: Servlet是Java Web的基础,Struts框架通常与...

    Struts入门

    8. **Struts标签库**:Struts提供了丰富的JSP标签,如logic标签、bean标签、html标签等,这些标签简化了视图层的开发,提高了代码的可读性。 9. **ActionServlet**:这是Struts的核心组件,它是一个实现了Servlet...

    struts.doc

    ### Struts标签、动态ActionForm、上传组件及Struts验证框架知识点详解 #### 一、Struts标签 **Struts** 是一款基于 **MVC**(Model-View-Controller)设计模式的开源Java Web框架,它能够帮助开发者构建可扩展且...

Global site tag (gtag.js) - Google Analytics