字符串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.不能省略"#"。也就說變量用於計算時不能省略"#"