程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Struts2 -- s:if標簽的使用

Struts2 -- s:if標簽的使用

編輯:關於JSP

A:<s:if>判斷字符串的問題:  1、判斷單個字符:<s:if test="#session.user.username=='c'">  這樣是從session中取出username的值,並且判斷其是否為c,但是這樣判斷是不正確的,這樣判斷的話,根本判斷不出來,要改成下面這樣:  <s:if test="#session.user.username=='c'.toString()">  這樣判斷才能正確判斷,至於原因我也不知道,在網上看到struts2中可能它判斷的是char類型。  2、判斷字符串:<s:if test="#session.user.username=='milo'">  這樣寫的就是判斷username是不是milo,是String的判斷,這個是不用加toString()的。  3、判斷數值:<s:if test="#session.user.username==0">  這樣寫的就是判斷username是不是0,是int的判斷。     B:判斷為空的問題:  <s:if test="#session.user.username==null">  struts2中的判空似乎只能這麼寫  判斷非空可以這樣寫:  <s:if test="#session.user.username!=null" >  ps:如果從action中取屬性值,test中的屬性值前面的'#'不需要,action中的屬性與jsp中的屬性是互通的。 ------------------------------------------------------------------------------------------------------------------------------------------------------------ 字符串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.不能省略"#"。也就說變量用於計算時不能省略"#"   ===================================================================================================     ognl中的#、%和$ #、%和$符號在OGNL表達式中經常出現,而這三種符號也是開發者不容易掌握和理解的部分。在這裡筆者簡單介紹它們的相應用途。 1.#符號的用途一般有三種。  1)訪問非根對象屬性,例如示例中的#session.msg表達式,由於Struts 2中值棧被視為根對象,所以訪問其他非根對象時,需要加#前綴。實際上,#相當於ActionContext. getContext();#session.msg表達式相當於ActionContext.getContext().getSession(). getAttribute(”msg”) 。  2)用於過濾和投影(projecting)集合,如示例中的persons.{?#this.age>20}。  3)用來構造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。 2.%符號 %符號的用途是在標志的屬性為字符串類型時,計算OGNL表達式的值。如下面的代碼所示: 構造Map <s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” /> <p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p> <p>不使用%:<s:url value=”#foobar['foo1']” /></p> <p>使用%:<s:url value=”%{#foobar['foo1']}” /></p> 3.$符號 $符號主要有兩個方面的用途。  在國際化資源文件中,引用OGNL表達式,例如國際化資源文件中的代碼:reg.agerange=國際化資源信息:年齡必須在${min}同${max}之間。  在Struts 2框架的配置文件中引用OGNL表達式,例如下面的代碼片斷所示: <validators>  <field name=”intb”>  <field-validator type=”int”>  <param name=”min”>10</param>  <param name=”max”>100</param>  <message>BAction-test校驗:數字必須為${min}為${max}之間!</message>  </field-validator>  </field> </validators>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved