Struts2 用 s:if test 判斷屬性和字串相等時 注意雙引號和單引號的使用
阿新 • • 發佈:2019-01-05
字串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.不能省略"#"。也就說變數用於計算時不能省略"#"
正確:
<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.不能省略"#"。也就說變數用於計算時不能省略"#"