<s:if test>的應用及OGNL表達式的取值

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章