struts2常用标签
要在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>