1. 程式人生 > >Struts2 在頁面定義變數 s:set標籤

Struts2 在頁面定義變數 s:set標籤

網上很多關於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";

遇到過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>