<s:set>標簽
set標簽 用於將某個值放入指定范圍內。例如application、session范圍等。
當某個值所在的對象圖深度非常深時,例如如下:person.worker.wife.parent.age,每次訪問該值不僅性能地下,而可讀性也很差。解決這個問題,可以將改該值設置成一個新值,並放入特定范圍內。
set標簽屬性:
- name: 必填,重新生成的新變量的名字
- scope: 可選,指定新變量被放置的范圍,該屬性可以接受application、session、request、page或action 5個值。如果沒有指定,默認是放置在Stack Context中。
- value: 可選,指定將賦給變量的值。如果沒指定,則將ValueStack棧頂的值賦給新變量。
- var: 可選,指定該元素的引用ID,如果指定了將會將該值放在ValueStack中!
set標簽用於生成一個新變量,並把該變量放置到指定的范圍內,這樣就允許直接使用JSP表達式語言來訪問這些變量,也可以通過struts2標簽來訪問!
eg:
<!--使用param標簽為JavaBean實例傳入參數--> <s:bean name="lee.Person" id="p"> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> </s:bean> 將Stack Context中的p值放入默認范圍內。<br> <s:set value="#p" name="xxx"/> <s:property value="#xxx.name"/> <br> 將Stack Context中的p值放入application范圍內<br> <s:set value="#p" name="xxx" scope="application"/> <s:property value="#attr.xxx.name"/> <br> 將Stack Context中的p值放入session范圍內<br> <s:set value="#p" name="xxx" scope="session"/> <!--使用JSP2.0表達式語言直接訪問session中的屬性--> ${sessionScope.xxx.name}<br>
取出集合中的值賦給<set標簽
<s:iterator id="dmsDocumentinfo" value="#request.dmsDocumentinfos"> //從集合中取值賦給set聲明的變量 <s:set name="str" value="#dmsDocumentinfo.documentDesc"> </s:set> //在頁面顯示set標簽的值 <s:property value="#str" /> </s:iterator>
<c:set> 標簽
<c:set>標簽就是<jsp:setProperty>行為標簽的孿生兄弟。這個標簽之所以很有用呢,是因為它會計算表達式的值,然后使用計算結果來設置 JavaBean 對象或 java.util.Map 對象的值。
屬性
<c:set>標簽有如下屬性:
屬性 | 描述 | 是否必要 | 默認值 |
---|---|---|---|
value | 要存儲的值 | 否 | 主體的內容 |
target | 要修改的屬性所屬的對象 | 否 | 無 |
property | 要修改的屬性 | 否 | 無 |
var | 存儲信息的變量 | 否 | 無 |
scope | var屬性的作用域 | 否 | Page |
如果指定了target屬性,那么property屬性也需要被指定。
實例演示
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>c:set 標簽實例</title> </head> <body> <c:set var="salary" scope="session" value="${2000*2}"/> <c:out value="${salary}"/> </body> </html>
運行結果如下:
4000