Struts2 在页面定义变量 s:set标签
http://blog.csdn.net/shiqidide/article/details/7398078
網上很多關于S:set標簽的用法,例如:
<s:set name="test" value="'測試'" />
<s:property value="#test" />
?
最近在項目開發中,需要一個把一個List中的id,循環輸出到一個js里面。測試了半天,得到如下代碼。
(假設test這個list中有個ID字段,值為1 2 3 4)
<script>
var aa="";
<s:set name="ttt" value="-1" />
<s:iterator id="epslist" value="test" status="index">
?<s:set name="ttt" value="#ttt+','+#epslist.id" />
</s:iterator>
aa="<s:property value="#ttt" />";
</script>
?
循環之后aa值="-1,1,2,3,4"。(這里根據自己的需要把紅色部分的value改為自己需要的,然后在用js操作該aa的值)
?
注意紅色部分,如果刪除掉紅色部分代碼,aa值為""(不是null).
如果把紅色部分代碼改為<s:set name="ttt" value="" /> 或者<s:set name="ttt" />
?
結果是:
第一種情況 aa="null,1,2,3,4";
第二種情況 aa=**.**.**.**@***,1,2,3,4;
遇到過set設置了字符串不能顯示的情況例如
<s:set name="ttt" value="abc" />
<s:property value="#ttt"/>按道理說可以顯示了啊。其實暗藏玄機,就是這時候他把abc當成變量來取值,而不是看成字符串。所以要想看成字符串必須加單引號。<s:set name="ttt" value="’abc‘" />
?
?
set標簽是將某個值放到指定范圍內, 比如說 student.teacher.parent.age 每次訪問這個屬性不僅性能低,而且代碼可讀性很差,為了解決這個問題,可以將這個值設置為一個新值,并且放入指定范圍內
name 是必填屬性,是重新生成的新變量的名字
scope 可選屬性,指定新變量被放置的范圍,可以接受application,session,request,page,action 這5個值 沒有指定默認是Stack Context中
value 可選屬性,指定變量的值 如果沒有指定,使用ValueStack棧頂的值賦給新變量
id 可選屬性,指定新元素的引用ID
下面是個例子:
<!-- 使用bean標簽定義一個javaBean實例--!>
<s:bean name="lee.Person" id="p">
<s:param name="name" value="zhangsan"/>
<s:param name="age" value="29"/>
</s:bean>
將p放入默認范圍內
<s:set value="#p" name="test"/>
<s:property value="#test.name"/> <br>
<s:property value="#test.age"/> <br>
將p放入application范圍內。
<s:set value="#p" name="test" scope="application"/>
<s:property value="#attr.test.name"/> <br>
<s:property value="#attr.test.age"/> <br>
將p放入session范圍內。
<s:set value="#p" name="test" scope="session"/>
${sessionScope.test.name} <br>
?
賦的值如果是一個表達式,基本都會,我看了樓上的各種回答,清一色的都是賦的表達式,都沒有賦常量的例子,
我現在也補充一個,如果value中要賦的是常量,如果直接
<s:set name="page2" value="listMaterialEnt"? scope="session"> </s:set>
這樣在頁面中是訪問不到listMaterialEnt這個字符串,怎么樣才能賦這個字符串常量值呢?加個單引號就搞定,這個也是我研究了半天才研究出來,如下:
<s:set name="page2" value="'listMaterialEnt'"? scope="session"> </s:set>
總結
以上是生活随笔為你收集整理的Struts2 在页面定义变量 s:set标签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入探讨 java.lang.ref 包
- 下一篇: valuestack,stackCont