1. 程式人生 > >struts2 s:if標籤中 #,%{},%{#}的使用方法

struts2 s:if標籤中 #,%{},%{#}的使用方法

<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>   另外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 另一個很容易錯誤應用的問題 <s:if test="deptType==1" >下屬</s:if>如果你的資料庫對應的欄位型別為整形,可以這樣使用; <s:if test="deptType=='1'" >下屬</s:if>如果你的資料庫對應的欄位型別為char,可以這樣使用; <s:if test="deptType=='aa'" >下屬</s:if>如果你的資料庫對應的欄位型別為varchar,並且資料庫中的字串都是多餘一個字元的字串,可以這樣使用; <s:if test="deptType==\"1\"" >下屬</s:if><s:else>直屬</s:else>(測試通過,這樣用是最正確的) 我遇到的樣式選中問題解決方法: <li>   <a href="/pro/pro!productList.action?proId=${productType.id}" <s:if test="#productType.id == #parameters.productType[0]">class="currt"</s:if>>${productType.typeName}</a> </li>

相關推薦

struts2 s:if標籤 #,%{},%{#}的使用方法

<s:if>判斷字串的問題:   1、判斷單個字元:<s:if test="#session.user.username=='c'">   這樣是從session中取出username的值,並且判斷其是否為c,但是這樣判斷是不正確的,這樣判斷的話

struts2 s:if標籤以及 #,%{},%{#}的使用方法

<s:if>判斷字串的問題:   1、判斷單個字元:<s:if test="#session.user.username=='c'">   這樣是從session中取出username的值,並且判斷其是否為c,但是這樣判斷是不正確的,這樣判斷的話,根本判斷不出來,要改成下面這樣:  

在頁面設定變數並使用Struts2 s:if 標籤判斷

因為<s:if>要比較的值必須放在作用域page,request,session...裡,所以先把值放到request裡 <% int apprType = 1;

移除struts2simple主題下<s:fieldError>標籤的預設樣式

<#-- /* * $Id$ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * dis

Mybatisif標籤的整型判斷問題

用mybatis進行資料修改的時候,age屬性沒有賦值,但是我使用update的時候age這個屬性也被修改了。age屬性是一個int型別。 <set>           &

Struts2:對Action方法進行輸入校驗

原始碼下載地址:http://download.csdn.net/detail/zhoujing_0424/9239429 在struts2中,我們可以實現對action的所有方法進行校驗或對action的指定方法進行校驗。對於輸入校驗,struts2提供了兩

struts2 s:textfield 標籤輸出日期問題

struts2 s:textfield 標籤輸出日期時會省略掉兩位,從網上找來解決方法: <s:date id="date1" name="date" format="yyyy-MM-dd"/><s:textfield name="date" value=

自己挖的坑自己填--Mybatis mapper檔案if標籤number型別及String型別的坑

  1.現象描述   (1)使用 Mybatis 在進行資料更新時,大部分時候update語句都需要通過動態SQL進行拼接。在其中,if標籤中經常會有 xxx !='' 這種判斷,若 number 型別的欄位上傳遞的值為 0, 執行更新時會發現資料庫中的資料並沒有被更新成 0,這種異常現象不會報錯,所以容易被

使用struts2標籤s:if判斷URL引數的一些問題

        目標:實現不同jsp頁面呼叫同一list.jsp頁面時,list.jsp頁面中的顯示內容不一樣,且list.jsp頁面有分頁功能        方法:在其他jsp頁面訪問list.jspjsp頁面時,傳入一個URL引數select,且在list.jsp中利用隱

Struts2<s-if>和<s-iterator>標籤的使用

A:<s:if>判斷字串的問題: 1、判斷單個字元:<s:if test="#session.user.username=='c'"> 這樣是從session中取出username的值,並且判斷其是否為c,但是這樣判斷是不正確的,這樣判斷的話,根本判斷不出來,要改成下面這樣: <

struts2<s:if>標簽的使用

單個字符 單獨 test 判斷字符串 判斷為空 但是 int 判斷 type 一、<s:if>判斷字符串的問題: 1、判斷單個字符:<s:if test="#session.user.TYPE==‘A‘ ">這樣是從session

Struts2s:iterator標籤的使用詳解

使用iterator遍歷一個值。一個可迭代的值可以是java.util.Collection,java.util.Iterator中的任何一個。 引數 Name Required Default Evaluated Type Description begin fals

struts2s:select標籤從前後臺的取值

1.第一種: <s:select list="{'aa','bb','cc'}"  headerKey="00" headerValue="0"></s:select> 2.第二種: <s:select list="#{1:'aa',2:'

struts2s:iterator 標籤的使用詳解 及 OGNL用法

User物件屬性獲取 如User中有username和password欄位 獲取username屬性<s:property value="user.username" /> 獲取password屬性<s:property value="user.password" /> 若User中又

SSH框架struts2標籤s:iterator標籤下使用s:select標籤

下面放幾段程式碼 實體類中 @Entity //實體 @Table(name="zl_user") public class Personinfo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(na

struts2s:iterator 標籤的使用詳解

簡單的demo: s:iterator 標籤有3個屬性: value:被迭代的集合 id   :指定集合裡面的元素的id status 迭代元素的索引 1:jsp頁面定義元素寫法 陣列或list <s:iterator value="{'1','2','3','4

struts2 iteratorif標籤的使用

今天碰到個問題,資料庫中有個欄位,現實到頁面上時需要根據欄位值判斷是否顯示為超連結,以前都是直接判斷是否等於某數值,但這次取出來以後是字串,結果判斷時候出問題,最後解決如下,看程式碼:   <s:iterator value="moList" id="mo">

Struts2 s:select 標籤相關使用

本沒有想總結這個標籤的,感覺也就那樣,但是確實這個標籤用的太多了,因此還是簡單總結一下 這裡列舉幾個常用的屬性吧: 1、name:用來作為Action中取值的屬性 2、id:可能要做某些取值操作 3、list:在後臺或者自定義的一個取值集合 4、listKey:標籤的ke

struts2 s標籤 s:set 和 s:if

set標籤是將某個值放到指定範圍內, 比如說 student.teacher.parent.age 每次訪問這個屬性不僅效能低,而且程式碼可讀性很差,為了解決這個問題,可以將這個值設定為一個新值,並且放入指定範圍內 name 是必填屬性,是重新生成的新變數的名字 scope 可選屬性,指定新變數被放置的範圍,

struts2s:iterator標籤在jsp頁面獲取action陣列物件

在昨天的開發過程中,需要在jsp頁面獲取action中的陣列物件的值,技術水平有效,開始覺得無從下手,後來想寫入java程式片,抱著試試看的心態打出了<s:property value='action中的陣列名'/>  發現頁面顯示出了陣列中的每一個元素,想逐個