欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Struts2 $,#,%詳解及實(shí)例代碼

 更新時(shí)間:2016年12月12日 11:23:36   投稿:lqh  
這篇文章主要介紹了Struts2 $,#,%詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下

最近在學(xué)ssh,一直搞不懂$,%,#的區(qū)別,做了點(diǎn)小練習(xí),慢慢也懂了一點(diǎn),將自己所學(xué)的也記錄下來吧。

   存在一下一個(gè)實(shí)體entity:

public class Person { 
 
  private int id ; 
  private String Name ; 
   
  public int getId() { 
    return id; 
  } 
   
  public Person(int id, String name) { 
    super(); 
    this.id = id; 
    Name = name; 
  } 
 
  public Person() { 
    super(); 
  } 
  public void setId(int id) { 
    this.id = id; 
  } 
  public String getName() { 
    return Name; 
  } 
  public void setName(String name) { 
    Name = name; 
  } 
 
} 

在struts2的Action中,寫了如下代碼:

@Override 
  public String execute() throws Exception { 
     
    //application  
    Person p = new Person(1,"zhangsan") ; 
    ActionContext.getContext().getApplication().put("person", p); 
     
    //session 
    Person p1 = new Person(3,"wangwu"); 
    ActionContext.getContext().getSession().put("person", p1); 
     
    //request 
    Person p2 = new Person(2,"lisi"); 
    ActionContext.getContext().put("person", p2) ; 
     
    //servletContext 
    Person p3 = new Person(5,"xiaoming"); 
    ActionContext.getContext().getContextMap().put("person", p3); 
     
    Person p4 = new Person(3,"wangwu"); 
    ActionContext.getContext().getValueStack().push(p4); 
     
    return "success"; 
  } 

分別在application,session,request,servletContext,valueStack中存入一個(gè)person對(duì)象,那么在JSP中我們可以按照一下方式獲取:

person: <input type="text" name="name" value="${person }" /><br />  
id: <input type="text" name="name" value="${person.id }" /><br />  
name: <input type="text" name="name" value="${person.name }" /><br /> 
<hr> 

         以上代碼所得出的person信息時(shí)xiaoming的,即ActionContext.getContext().getContextMap()中存放的信息,通過查詢$的用法,發(fā)現(xiàn)$獲取對(duì)象的方式是有方式的,即

ActionContext.getContext().getContextMap() > ActionContext.getContext() >ActionContext.getContext().getSession() >ActionContext.getContext().getApplication(),對(duì)于不同的scope(范圍)中存在同名對(duì)象時(shí),$的查找方式將會(huì)按照以上步驟進(jìn)行,找到即輸出,沒有找到繼續(xù)上一級(jí)查找,到頂不存在時(shí)將輸出null。

   那么$的用法為:${scope.object.attribute}

   scope的屬性值為request,session,application,默認(rèn)不寫時(shí)將按照上述所說的方案查找,找到即輸出相關(guān)屬性值。

  在struts標(biāo)簽中,存一個(gè)這樣的:

<s:property value="#application.person"/>

   可以看出,此時(shí)用到了#號(hào),個(gè)人認(rèn)為,其實(shí)#和$的用法完全是一樣的,只要你將需要輸出的對(duì)象裝進(jìn)不同范圍的map(servletContext,request,session和application),在view中展示時(shí),使用<s:property value="#scope.object.attribute">跟$理解完全是一樣的。但是你在使用struts的標(biāo)簽時(shí),比如:

<s:textfield name="person.name"></s:textfield> 

完全可以理解為

<input type="text" name="persom.name" id="person.name" value="<s:property value="#person.name"/>" /> 

即struts的標(biāo)簽已經(jīng)在HTML的text中給我們封裝了<s:property value="#target.name"/>,可以給我省去很多代碼的。
同理,那么#的用法為:<s:property value="#scope.object.attribute" />

當(dāng)然完全可以使用struts2給我們定義的標(biāo)簽,這樣完全可以省去寫過多重復(fù)代碼的麻煩。其實(shí)#還有其他的用法,比如用來構(gòu)造map等對(duì)象,但是個(gè)人覺得在view中寫過多代碼的時(shí)代已經(jīng)過去,這種用法已經(jīng)沒有太多的意義,況且這次我只寫出在view展示的過程,因此其它地方不扯了。

最后,扯一點(diǎn)%的用法,簡(jiǎn)單的看,%{}就是字符串計(jì)算表達(dá)式,舉個(gè)例子,view中存在某個(gè)環(huán)節(jié),一般都存在CRUD等基本功能,對(duì)于add和uppdate功能,完全可以在同一個(gè)頁面完成,不同的是我們提交的地址是不同的,比如可能只這樣的:對(duì)于add方法,地址為user_add.action,對(duì)于udpate方法,地址為user_update.action,那么在form中,可以使用%進(jìn)行判斷:

<s:form action="user_%{ id == 0 ? 'add' : 'update' }"></form> 

呵呵,這樣以前的兩個(gè)頁面現(xiàn)在完全一個(gè)頁面可以解決掉。

同理,%與struts中的if,ifelse等判斷標(biāo)簽聯(lián)合起來用得比較多,畢竟是比較的嗎。。。。

<s:if test="%{false}"> 
  <div>Will Not Be Executed</div> 
</s:if> 
<s:elseif test="%{true}"> 
  <div>Will Be Executed</div> 
</s:elseif> 
<s:else> 
  <div>Will Not Be Executed</div> 
</s:else> 

最后,說說這個(gè)%很有用的做法,假設(shè)存在一個(gè)列表展示student全部及格的成績(jī)(即不及格的成績(jī)將不會(huì)展示在上面),如果使用的%將是非常簡(jiǎn)單的。不扯,先上代碼:

public class Stduent implements java.io.Serializable{ 
   
  private static final long serialVersionUID = -691038814755396419L; 
  private int id ; 
  private String name ; 
  private int score ; 
  private String subject ; 
   
  public int getId() { 
    return id; 
  } 
  public void setId(int id) { 
    this.id = id; 
  } 
  public String getName() { 
    return name; 
  } 
  public void setName(String name) { 
    this.name = name; 
  } 
  public int getScore() { 
    return score; 
  } 
  public void setScore(int score) { 
    this.score = score; 
  } 
  public String getSubject() { 
    return subject; 
  } 
  public void setSubject(String subject) { 
    this.subject = subject; 
  } 
   
  /** 
   * 此處判斷成績(jī)是否及格 
   * @param socre 
   * @return 
   */ 
  public boolean isPast(int socre){ 
    return getScore() > 60 ; 
  } 
   
} 

那么,現(xiàn)在數(shù)據(jù)庫中查找學(xué)生成績(jī),放到list中暫時(shí)存放起來,在JSP頁面,我們可以使用以下代碼來控成績(jī)制輸出是否及格:

<s:iterator value="#allUser"> 
  <!-- 判斷是否過線,過線即輸出,否則舍去! --> 
    <s:if test="#session.user.isPast(score)"> 
        name: <s:textfield name="name"></s:textfield> 
        score: <s:textfield name="score"></s:textfield>\ 
        subject:<s:textfield name="subject"></s:textfield> 
    </s:if> 
</s:iterator> 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 詳解Java的Hibernate框架中的注解與緩存

    詳解Java的Hibernate框架中的注解與緩存

    這篇文章主要介紹了詳解Java的Hibernate框架中的注解與緩存,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • JAVA對(duì)象clone方法代碼實(shí)例解析

    JAVA對(duì)象clone方法代碼實(shí)例解析

    這篇文章主要介紹了JAVA對(duì)象clone方法代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • springboot中通過lua腳本來獲取序列號(hào)的方法

    springboot中通過lua腳本來獲取序列號(hào)的方法

    這篇文章主要介紹了springboot中通過lua腳本來獲取序列號(hào)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn)

    基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn)

    這篇文章主要介紹了基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Java中的Cglib動(dòng)態(tài)代理詳細(xì)解讀

    Java中的Cglib動(dòng)態(tài)代理詳細(xì)解讀

    這篇文章主要介紹了Java中的Cglib動(dòng)態(tài)代理詳細(xì)解讀,CGLib是一個(gè)強(qiáng)大的、高性能、高質(zhì)量的 Code 生成類庫,它可以在運(yùn)行期擴(kuò)展 Java 類與實(shí)現(xiàn) Java 接口,需要的朋友可以參考下
    2023-11-11
  • emoji表情與unicode編碼互轉(zhuǎn)的實(shí)現(xiàn)(JS,JAVA,C#)

    emoji表情與unicode編碼互轉(zhuǎn)的實(shí)現(xiàn)(JS,JAVA,C#)

    這篇文章主要介紹了emoji表情與unicode編碼互轉(zhuǎn)的實(shí)現(xiàn)(JS,JAVA,C#),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java求字符串長(zhǎng)度的方法舉例

    Java求字符串長(zhǎng)度的方法舉例

    這篇文章主要給大家介紹了關(guān)于Java求字符串長(zhǎng)度的相關(guān)資料,Java中的字符串是一種常見的數(shù)據(jù)類型,用于表示文本數(shù)據(jù),文中給出了詳細(xì)的代碼實(shí)例,需要的朋友可以參考下
    2023-10-10
  • 詳細(xì)分析Java內(nèi)存模型

    詳細(xì)分析Java內(nèi)存模型

    Java虛擬機(jī)規(guī)范中定義了Java內(nèi)存模型(Java Memory Model,JMM),用于屏蔽掉各種硬件和操作系統(tǒng)的內(nèi)存訪問差異,以實(shí)現(xiàn)讓Java程序在各種平臺(tái)下都能達(dá)到一致的并發(fā)效果,JMM規(guī)范了Java虛擬機(jī)與計(jì)算機(jī)內(nèi)存是如何協(xié)同工作的,以及在必須時(shí)如何同步的訪問共享變量
    2021-06-06
  • Java連接MongoDB的常用方法詳解

    Java連接MongoDB的常用方法詳解

    這篇文章主要為大家詳細(xì)介紹一下Java語言連接MongoDB的常用方法以及實(shí)現(xiàn)增刪改查功能的示例代碼,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-07-07
  • JDK輸入命令Javac報(bào)錯(cuò)的解決方法

    JDK輸入命令Javac報(bào)錯(cuò)的解決方法

    相信很多人都經(jīng)歷過配置環(huán)境變量失敗的經(jīng)歷,尤其是很多時(shí)候明明按照老師教的步驟或者教程上的方法循規(guī)守矩配置卻還是出錯(cuò),下面我們來解決一個(gè)非常蹊蹺的問題---輸入Java和Java -version都沒問題,但是輸入Javac報(bào)錯(cuò),感興趣的朋友一起看看吧
    2023-11-11

最新評(píng)論