jsp標簽jstl和el表達式


1.el表達式的使用

  1)訪問bean的屬性

    方式一:

      ${user.name},容器會依次從pageContext,request,session,application中查找(getAttribute)綁定名稱為user的對象,並調用該對象的getName方法,最后輸出。

      並且比較友好,找不到對象會將null轉換成""空字符串輸出。但是一定要有get方法,如果找不到get方法,還是會error500錯誤。

      指定查找范圍:pageScope,requestScope,sessionScope,application來指定,例如${sessionScope.user.name},就算session找不到,其他地方也不找了

    方式二:

      ${user["name"]}

      ${user.interest[0]},可以訪問數組下標,要有get方法。

  2)進行一些簡單的運算,運算的結果可以給jsp標簽的屬性賦值,也可以直接輸出。

    a.算術運算 +- */ %

      ${1+1}直接輸出2,沒有字符串拼接 .${"2"+"4"}輸出6

    b.關系運算 > < = == >= !=

      ${2>1}直接輸出true

    c.邏輯運算 && || !

      ${1<2 && 2>3} false

    d.empty運算

      用來判斷集合是否為空,或者是否是一個空字符串

      <%

        List list1=new ArrayList();

        request.setAttribute("list",list1);

        request.setAttribute("str2","");

        ${empty list} //輸出true

        ${empty str2}//輸出true

        ${empty null}//輸出true

        ${empty aaa}//輸出true,容器找不到aaa這個綁定名也會true

      %>

  3)讀取請求參數值 e3.jsp?username=Sally

      a.${param.username}等價於request.getParameter("username");

      b.${paramValues.city}等價於request.getParamterValues("city");

 


 

jstl標簽

將jstl相關的jar文件拷貝到WEB-INF/lib下

如果使用javaee5.0,已包含jstl相關的jar文件。一般不需要再拷貝。

使用taglib指令,導入相應的標簽。

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

jstl的核心標簽:

  1)if

  <c:if test="${user.gender == 'm'}">男</c:if>

  <c:if test="${user.gender != 'm'}">女</c:if>

  <c:if test="${user.gender == 'm'}" var="flag" scope="request">男</c:if>   等價於request.setAttribute("flag",運行結果true/false)   ,scope可以寫page,session,application

  <c:if test="${!flag}">女</c:if>  通過上面一行的flag結果來判斷

 

  2)choose  相當於if{} elseif{} else{}

    when可以出現1次或者多次。當test屬性為true時,會執行該分支。

    otherwise可以出現0次或者1次。表示例外。

  <c:choose>

    <c:when test="${user.gender == 'm'}">男

    </c:when>

    <c:when test="${user.gender == 'f'}">女

    </c:when>

    <c:otherwise>保密

    </c:otherwise>

  </c:choose>  

 

  3)forEach標簽,用來遍歷集合或者數組。每次從集合或者數組中取一個元素,然后將其綁定到pageContext上,綁定名由var屬性來指定。

    items屬性用來指定要遍歷的集合活着數組,可以使用el表達式。

    var屬性用來指定綁定名,綁定范圍固定是pageContext.

    varStatus屬性:用來制定一個綁定名,綁定范圍固定是pageContex。綁定值是一個特殊的對象,該對象提供了一些方法,用來獲得當前遍歷的狀態。getIndex():獲得當前被遍歷的元素的下標(從0開始)。getCount():獲得當前是第幾次遍歷(從1開始)

  <c:forEach items="" var="" varStatus="">

  </c:forEach>

  例子:

  <table>

    <tr>

      <td>姓名</td>

      <td>性別</td>

      <td>年齡</td>

      <td>index</td>

      <td>count</td>

    </tr>

    <c:forEach items="${userlist}" var="u" varStatus="s">

      <tr class="row${s.index%2+1}">  //css寫個row1 row2的class,表格行顏色互換

        <td>${u.name}</td>

        <td>${u.gender}</td>

        <td>${u.age}</td>

        <td>${s.index}</td>

        <td>${s.count}</td>

      </tr>     

    </c:forEach>

  </table>

 

例子:listEmp.jsp

  servlet用轉發把emplist傳給jsp。刪除按鈕<a href="del.do?id=${u.userid}" onClick="return confirm('確定刪除${u.username}嗎?')">刪除</a>

  修改按鈕<a href="load.do?id=${u.userid}>修改</a>

  


2.自定義標簽 簡單標簽(new) 復雜標簽(old)

  step1,寫一個java類,繼承SimpleTagSupport類。

  step2.orerride doTag方法,在該方法里面編寫處理邏輯。

  step3,描述標簽(.tld文件)

<%@taglib uri="test" prefix="c1"%>

<c1:hello msg="hello world" qty="100"/>

包名tag,類名HelloTag.

重寫doTag()方法.並增加屬性,這些屬性要有對應的set方法。

  private String msg;

  private int qty;

  public void doTag() throws JspException, IOException {
  PageContext ctx=(PageContext)getJspContext(); JspWriter out = ctx.getOut(); for(int i=0;i<qty;i++){
    out.println(msg+"<br/>");
  } }

 然后新建一個mytag.tld,放到WEB-INF下面和web.xml平級。

把c.tld里面xml根元素和taglib根元素復制過來。

把tlib-version,short-name,url拷過來

並把url改成test,short-name 改成c1

把23到41行tag標簽復制過來。name改成hello。tag-class改成tag.HelloTag。

如果把body-content改成empty,那么在jsp里,不能寫標簽體。如果寫成scriptless,表示帶有標簽體,但不能寫任何java代碼<c1:hello msg="hello world" qty="100"></c1:hello>。如果寫成JSP表示當中可以寫java代碼,有標簽體。

attribute中,<name>寫成msg,required如果寫true一定要寫msg,false可寫可不寫msg。rtexprvalue表示能否動態賦值,可以通過el表達式計算賦值。

再寫個attribute,name寫成qty,required寫true,rtexprvalue寫true例如jsp里qty="${1+7}"

 

寫個日期標簽和上面過程差不多

<c1:date pattern="yyyy-MM-dd"/>


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM