首页 > 技术文章 > struts2常用标签

mjsh 2013-08-09 09:54 原文

要在jsp中使用Struts2的标志,先要指明标志的引入。通过jsp的代码的顶部加入以下的代码:

 

<%@taglib prefix="s" uri="/struts-tags" %>

 1.property

此标签主要是在页面上输出需要显示的值。

①显示ognl表达式里的值

<s:property value="username"/>

 这里的username是ognl表达式,可以通过<s:debug></s:debug>标签来显示出保存在栈内的变量

 ②显示自定义的字符串常量

<s:property value="'username'"/>

这会在页面上显示username字符串

③设定默认值

<s:property value="admin" default="管理员"/>

显示ognl表达式admin里的值,如果找不到admin则默认赋值"管理员"并显示出来。

④设定HTML

<s:property value="'<hr/>'" escape="false"/>

escape默认为true,表示将value里的值当做是字符串显示出来,如果为false表示不将value里的值转换成字符串,而做为HTML语句输出来。

2.set

此标签主要是设置参数的值

<s:set var="adminName" value="username" />

注意value里是ognl表达式,如果给adminName设置一个字符串,则需要加上单引号。

如果不设置范围,那么adminName变量默认保存在request 和 ActionContext下面:

①从request取值

 <s:property value="#request.adminName" />

②从ActionContext取值(直接通过#获取变量对应的值)

<s:property value="#adminName" />

可以设定变量保存的范围(范围有application,session,request,page和action几种)

<s:set name="adminPassword" value="password" scope="page"/>

从相应范围取值(默认范围是action,即保存在ActionContext里)

<%=pageContext.getAttribute("adminPassword") %>

3.bean

用来定义bean,并使用param来设定新的属性值。

<s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">
        <s:param name="name" value="'oudy'"></s:param>
</s:bean>

定义一个Dog类的对象myDog,此对象保存在ActionContext内,如果要拿出myDog参数的值则直接用#

<s:property value="#myDog.name"/>

4.include

和<jsp:include page="/public/head.jsp" />的功能一样,但是尽量少用。

<s:include value="/_include1.html"></s:include>

注意这里的value里是字符串,如果需要放ognl表达式时,他会自动当成字符串。

<s:set var="incPage" value="%{'/_include1.html'}" />
<s:include value="#incPage"></s:include>
<s:include value="%{#incPage}"></s:include>

第一个include会吧#incPage当成字符串,第二个include通过%{},先让#incPage当成ognl表达式取出保存的值,这样value就会把取出的值当做字符串来去找相关的页面,%{}的功能就是强制性让括号内的转换成ognl表达式。

5.if elseif else

<%request.setCharacterEncoding("utf-8");%>
country=<%=request.getParameter("country") %><br>
<s:if test="#parameters.country[1] == 'www'">中国</s:if>
<s:elseif test="#parameters.country[0] == '美国'">美国</s:elseif>
<s:else >其他国籍的人</s:else>

注意:Struts2将URL传的参数封装成一个数组并保存在ActionContext内的parameters对象里,所以可以通过ognl表达式#parameters来获取对应的参数值,如果一个URL内传两个同名的参数时(即?name=a&name=b),则将这两个值继续封装成一个数组保存在对应的参数名下,通过#parameters.name[1]可以这样取值。

6.iterator

①遍历

<s:iterator value="{1, 2, 3}" >
      <s:property/> |
</s:iterator>

property显示每次循环的值。

②自定义变量

<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
      <s:property value="#x.toUpperCase()"/> |
</s:iterator>

自定义变量x保存每次循环的值,保存在ActionContext内。

③使用status

status里保存了每次循环的状态

<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
    <s:property/> | 
    遍历过的元素总数:<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>

④遍历map

遍历map需要加#

<s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
     <s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
     <s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>

 

 

 

 

推荐阅读