当前位置: 代码迷 >> Web前端 >> Struts2惯用标签之通用标签的使用
  详细解决方案

Struts2惯用标签之通用标签的使用

热度:232   发布时间:2013-10-06 18:25:14.0
Struts2常用标签之通用标签的使用

Struts2标签的分类:

  • 通过struts2的文档可以查看到所有的标签:strust2\struts-2.3.7\docs\WW\tag-reference.html。
  • 分为:Generic Tags(通用标签库)和UI Tags(UI标签库)。

Struts2通用标签库之数据标签:

  • <s:property/>标签用来执行OGNL表达式,最为常用的方式是使用它在页面中输出ValueStack或ActionContext中的数据。<s:property value="#request.hello"/>等同于ActionContext.getContext().getRequest().get("hello");
  • 参数说明:
    名称 必需 默认值 类型 说明
    default String 表示默认值。当结果为null时,输出默认值。
    escape true Boolean 表示是否进行转义。该值为true时,当结果中包含<、>、”、’、&时,对其进行转义。
    value 栈顶对象 Object Ognl表达式

  • 以下是Struts2自带的例子,如果想了解的更加详细。可以查看参考文档,也就是上面给出的,点击某个标签就行。
    Examples
    <s:push value="myBean">
        <!-- Example 1: -->
        <s:property value="myBeanProperty" />
    
        <!-- Example 2: -->TextUtils
        <s:property value="myBeanProperty" default="a default value" />
    </s:push>
    
    Example 1 prints the result of myBean's getMyBeanProperty() method.
    Example 2 prints the result of myBean's getMyBeanProperty() method and if it is null, print 'a default value' instead.
    

<s:set/>标签的使用:

  • <s:set/>标签用来创建一个变量,保存到指定的范围内。
  • <s:set var="myVal" value="124" scope="name"/>,创建一个变量,保存到page范围,key为'myVal',值为‘name’运算后的值。
  • 常用参数介绍:
  • 名称 必需 默认值 类型 说明
    var String 变量的域名字,默认不是Ognl表达式
    value 栈顶对象 Object OGNL表达式
    scope Action String 变量的范围。可选值:application、session、request、page、action





  • scope的可选值action是一个陌生的范围,它是scope的默认值。它表示保存到request和OgnlContext两个范围中。即比request范围多出了一个OgnlContext范围。
  • 一些用法:
    <s:set var=”myVar” value=”#parameters.score[0]” />
    <s:property value=”#myVar”/>等同于ActionContext.getContext().get(“myVar”);
    <s:property value=”#request.myVar”/>等同于ActionContext.getContext.getReuqest().get(“myVar”);
    
    Struts2自带的例子:
    <s:set name="personName" value="person.name"/>
    Hello, <s:property value="#personName"/>. How are you?

<s:push/>标签的使用:

  • <s:push/>标签是把指定值压入到值栈中,当执行完<s:push/>标签后,压入到值栈的值会被弹出。
  • <s:push value="hello"/>相当于将'hello'压入值栈后,马上弹出,相当于什么都没做。
  • <s:push value=”#session.user”>把user压入到值栈中
      <s:property value=”username”/>打印值栈元素的username属性
      <s:property value=”password”/>打印值栈元素的password属性
    </s:push>把user从值栈中弹出

<s:url/>标签的使用:

  • <s:url/>标签通常用来生成action路径,它与<c:url/>标签类似。
  • <s:url action="testAction"/>在页面打印"/项目名/testAction.action"。也就是它与<c:url/>一样会生成全路径。而且无需给出后缀名,action属性的值只需和struts.xml文件中的<action name="testAction"/>name属性的相同就行。
  • <s:url namespace="/" action="textAction"/>还可以指定名称空间。
  • <s:url/>标签通常结合<s:param/>标签使用,来传递参数。例如:
    <s:url action=”TestAction”>
      <s:param name=”name” value=”’张三’”/>
    </s:url>
    

  • 页面打印结果:页面中打印为:/ognl/TestAction.action?name=%E5%BC%A0%E4%B8%89。通过URL传递参数。其中的中文通过URL编码。
  • 其中的<s:param/>是用来作为子标签的,它的作用是指定参数。它的value属性为Ognl表达式,所以张三用单引号引起来,表示Ognl表达式的字符常量。
  • <s:url/>常用参数说明
    名称 必需 默认值 类型 说明
    action String 指定生成URL的action
    value String 指定用于生成URL的地址值。
    通常只使用action或value其中一个属性。
    method String 指定调用action中的方法。
    如果使用的是value属性,那么该属性无效。
    var String 如果指定了该属性,那么生成的URL不会输出到页面中,
    而是被保存到OgnlContext中。
    namespace String 指定action的名称空间
    forceAddSchemeHostAndPort
    false Boolean 当该属性为true时,生成的URL为绝对路径,
    而且会包含主机名及端口号。

<s:a/>标签的使用:

  • 它用来生成超链接,与<s:url/>类似。
  • 用法:
    <s:a action=”TestAction” namespace=”/”>添加用户
      <s:param name=”name” value=”’张三’”/>
    </s:a>
    

<s:debug/>标签的使用:

  • Debug标签用于调试,它在页面中生成一个"[Debug]"超连接,单击这个超链接,可以查看ValueStack和ActionContext中保存的所有对象。

Struts2通用标签之控制标签:

  • 控制标签很好理解,就是流程控制了。例如if、elseif等,以及iterator等。
    <s:if>、<s:elseif>、<s:else>
    这种标签大家应该一看就会用了。我们直接给出个小例子看看。
    <!―
    在浏览器中输入:http://localhost:8080/tagtest/index.jsp?score=85
    -->
    <s:set name="score" value="#parameters.score[0]"/>
    <s:property value="#score"/>: 
    <s:if test="#score > 100 || #score < 0">
    	<s:property value="'输入错误'"/>
    </s:if>
    <s:elseif test="#score >= 90">
    	<s:property value="'A'" />
    </s:elseif>
    <s:elseif test="#score >= 80">
    	<s:property value="'B'" />
    </s:elseif>
    <s:elseif test="#score >= 70">
    	<s:property value="'C'" />
    </s:elseif>
    <s:elseif test="#score >= 60">
    	<s:property value="'D'" />
    </s:elseif>
    <s:else>
    	<s:property value="'E'"/>
    </s:else>
  • <s:iterator/>标签可以用来迭代一个集合,可以迭代的的集合有:Collection、Map、Enumeration、Iterator或者是数组。iterator标签在迭代过程中,会把当前对象暂时压入值栈,这样在子标签中就可以直接访问当前对象的属性(因为当前对象在栈顶),在标签体执行完毕后,位于栈顶的对象就会被删除,在循环的第二圈时,把新的当前对象再压入值栈中。
    • <s:iterator value="{'zhangSan','liSi','wangWu' }">
      	name: <s:property/><br/>
      </s:iterator>
  • 如果为<s:iterator>标签指定了var属性,那么当前对象不只是压入到了值栈中,而且还会被添加到OgnlContext中。
    <s:iterator value="{'zhangSan','liSi','wangWu' }" var="name">
    	name: <s:property value="#name"/><br/>
    </s:iterator>
    

  • <s:iterator/>标签常用参数介绍:
    名称 必需 默认值 类型 说明
    var String 如果指定了该属性,
    那么迭代的集合中的元素将被保存到OgnlContext中,
    可以通过该属性的值来引用集合中的元素。该属性几乎不被使用。
    value Coolection、
    Map、
    Enumeration、
    Iterator 或数组
    指定迭代的集合。
    如果没有指定该属性,
    那么iterator标签将把位于值栈栈顶的对象放入一个新创建的List中进行迭代。
    status String 如果指定了该属性,
    一个IteratorStatus实例将被放入到OgnlContext中,

    通过该实例可以获取迭代过程中的一些状态信息。


  • IteratorStatus类在org.apahce.struts2.views.jsp包下。下面是对该类常用方法的介绍:
    • public int getCount():得到当前已经迭代的元素的总数。
    • public int getIndex():得到当前迭代的元素的索引。
    • public boolean isEven():判断当前迭代的元素的个数是否是偶数。
    • public boolean isOdd():判断当前迭代的元素的个数是否是奇数。
    • public boolean isFirest():判断当前迭代的元素是否是第一个元素。
    • public boolean isLast():判断当前迭代的元素是否是最后一个元素。
  • 示例代码的使用如下:(在OGNL表达式中使用IteratorStatus类的方法时,可以直接使用:count、index、even、odd、first、last属性。)
    <s:iterator value='{"one", "two", "three"}' status="status">
    	<s:property value="#status.count"/>,
    	<s:property value="#status.index"/>,
    	<s:property value="#status.even"/>,
    	<s:property value="#status.odd"/>,
    	<s:property value="#status.first"/>,
    	<s:property value="#status.last"/><br/>
    </s:iterator>
    <hr/>
    <s:iterator value="#{'1':'one','2':'two','3':'three','4':'four'}" status="st">
    <s:property value="key"/>:<s:property value="value"/><br/>
    </s:iterator
  相关解决方案