1. 程式人生 > >Struts2 用 s:if test 判斷屬性和字串相等時 注意雙引號和單引號的使用

Struts2 用 s:if test 判斷屬性和字串相等時 注意雙引號和單引號的使用

字串N一定要用“”雙引號包含,從test的包含則用單引號 ‘ ’,如果相反,則不能正確判斷該屬性是否與該字串相等。

正確:
<s:if test='activityBean.searchForce=="N" '>

錯誤:

<s:if test="activityBean.searchForce=='N' ">

因為java是強型別語言,單引號表示char型別,只能賦給一個字元給char型別,
而雙引號則表示String型別

所以我的activityBean.searchForce屬性是String型別,那麼N必須要用雙引號

/*******************************************
例如這個語句
要判斷struts堆疊裡systemSettingModel.settingValue 是否等於 "A"
寫成
<s:if test="systemSettingModel.settingValue == 'A'">...</s:if>
是不對的。
這樣A被認為是字元,而systemSettingModel.settingValue是單字元的字串,不匹配


應寫成
<s:if test='systemSettingModel.settingValue == "A"'>。。。 </s:if>

<s:if test="systemSettingModel.settingValue == \"A\"">... </s:if>

參考:
http://struts.apache.org/2.1.8.1/docs/why-wont-the-if-tag-evaluate-a-one-char-string.html

另外systemSettingModel.settingValue的值可以這樣取得
${systemSettingModel.settingValue}
<s:property value="systemSettingModel.settingValue"/>
<s:property value="#request.systemSettingModel.settingValue"/>

#表示不在struts堆疊裡,沒有#表示從struts堆疊裡取


/***********************************
Struts2堆疊
struts2中的標籤
    s:a            中的href 什麼時候使用“# ” 什麼時候該用“%{ }”  什麼時候該用“%{# }” 什麼時候用“”
    s:select      中的list 什麼時候使用“# ” 什麼時候該用“%{ }”  什麼時候該用“%{# }” 什麼時候用“”
    s:if          中的test 什麼時候使用“# ” 什麼時候該用“%{ }”  什麼時候該用“%{# }” 什麼時候用“”
    s:iterator    中的value什麼時候使用“# ” 什麼時候該用“%{ }”  什麼時候該用“%{# }” 什麼時候用“”
    s:checkboxlist 中的list 什麼時候使用“# ” 什麼時候該用“%{ }”  什麼時候該用“%{# }” 什麼時候用“”



Struts2中有值堆疊和堆疊上下文的概念,你用 <s:debug />可以看出.

S標籤中用#可以取出堆疊上下文中的存放的物件.
用%{}可以取出存在值堆疊中的Action物件,直接呼叫它的方法.例如你的Action如果繼承了ActionSupport .那麼在頁面標籤中,用%{getText('key')}的方式可以拿出國際化資訊. %{#}, 這是JSP2.1最新規範中的語法,是Struts2為其解決相容性問題而寫成%{#}的



在域物件中使用%{#}
比如%{#session.user.userName}
將獲得user物件的 userName屬性值



%{}強調的是從你設定的root點取

%{}用於計算表示式
      如%{10+20}結果將輸出30
      如%{"a"+"b"}結果將輸出"ab"
#通常強調從上下文取
      如#parameters.name[0]等價於request.getParameter("name")
      如#session.name等價於session.getAttribute("name")
      如#request.name等價於request.getAttribute("name")
%{#}仍然用於計算表示式,只不過操作元可以是變數
      如先定義一個變數
      <s:set name="age" value="%{25}"/>
      則%{#age}將輸出25,也可以省略"#",寫為%{age}
      若將age加10,可這麼寫:
      %{#age+10},將輸出30.不能省略"#"。也就說變數用於計算時不能省略"#"