亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

jsp中如何通過API方式獲取jstl的變量

2024-09-05 00:19:19
字體:
來源:轉載
供稿:網友

一,問題概述

jstl的出現,的確標準化了我們的jsp開發,也使得頁面變得更加清晰,這也正是j2ee推出jstl的一個意圖。例如jsp中要求取出request中保存的一個屬性username,以前習慣的方式:
<%
      string username=(string)request.getattribute("username");
      out.println(username);
%>
或者
<%
      string username=(string)request.getattribute("username");
%>
<%=username%>
在使用jstl后,則可以直接書寫為:
<c:out value="${username}"/>
或者直接
${username}
可見去掉<%%>的使用后,jsp的確簡潔了許多。
不過在具體使用中,我們發現jstl提供的標簽庫只能在一定程度上滿足我們的應用邏輯要求,有些時候不得不在jsp中借助java代碼來實現。例如在jsp中要求取出request屬性信息中的用戶列表userlist,列出每個用戶時,如果該用戶為管理員用戶(假設該判斷由一個工具類的靜態方法來提供),則該用戶顯示為紅色,以前習慣的方式為:
<%
     list users=(list)request.getattribute("userlist");
     iterator us=users.iterator();
     while(us.hasnext()){
         user user=(user)us.next();
         booean hasadminrole=permissionutil.hasrole(user,role.admin);
         string color="black";
         if(hasadminrole){
             color="red";
         }
%>
<font color="<%=color%>"><%=user.getname%></font>
<%
     }
%>
那上面的邏輯是否可以使用jstl來實現呢,我們嘗試一下:
<c:set var="color" value="black"/>
<c:foreach items="${userlist}" var="user">
    <c:if test="如果是管理員">
       <c:set var="color" value="red"/>
   </c:if>
   <font color="<c:out value='${color}'/>"><c:out  value="${user.name}"/></font>
</c:foreach>
基本上可以,但是問題就在于如何判斷每次循環到的用戶是否為管理員呢?我們知道判斷方法是在一個工具類中實現的,而jstl標簽中還沒有可以直接調用類的方法的標簽,因此僅是標簽的jstl無法滿足這個要求。

二,解決方式

1,寫一個自定義標簽,來判斷當前循環到的用戶是否為管理員,如下:
<%@ taglib uri="/web-inf/myrolecheck.tld" prefix="role"%>
<c:set var="color" value="black"/>
<c:foreach items="${userlist}" var="user">
   <role:check user="${user.name}" role="admin">
       <c:set var="color" value="red"/>
   </role:check>
   <font color="<c:out value='${color}'/>"><c:out  value="${user.name}"/></font>
</c:foreach>
當然,上面的方式要求我們自定義的標簽能夠支持對el方式的解析,這實際上可以通過evalhelper類來實現。

2,聯合使用jstl與java api。使用這種方式,我們需要對jstl了解的更深一些,我們知道jstl和java api(或者說是<%%>方式)是很不相同的兩種書寫方式,他們之間的變量有些可以很好的傳遞,但有些卻讓人摸不著頭腦,例如:
1)<%%>變量在jstl中獲取的例子:
<%
      string username="zhangsan";
      pagecontext.setattribute("username",username);
%>
<c:out value="${username}"/>
即:jsp頁面中<%%>中的變量在定義后,需要放置到pagecontext屬性中,才能被獲?。ó斎灰部梢苑胖玫絩equest和session、applicatio中,這要根據實際應用來做決定,一般只是在頁面中使用的化,使用pagecontext就可以了)。
2)jstl變量在<%%>中獲取的例子:
<c:set var="username" value="zhangsan"/>
<%
      string username=(string)pagecontext.getattribute("username");
%>
上面為什么要在pagecontext中來獲取呢,因為c:set方式定義的變量默認是存放在pagecontext的屬性中的,當然了如果在定義是指定了作用范圍,則也需要通過相應作用范圍的頁面對象來獲取該屬性,例如:
<c:set var="username" value="zhangsan"  scope="session"/>
<%
      string username=(string)session.getattribute("username");
%>

另外,還要主要一點,jstl中的許多操作都用到了var屬性,例如c:foreach、c:import等等,這些var所代表的變量默認也是存放在pagecontext中的,當然有些標簽還提供了scope屬性,這也意味著其var所代表的變量會存放到scope指定的范圍之中。

在理解這些的基礎上,再來使用聯合方式解決最初的問題就相對好說多了,如下:
<c:foreach items="${userlist}" var="user">
   <%
         user user=(user)pagecontext.getattribute("user");
         booean hasadminrole=permissionutil.hasrole(user,role.admin);
         string color="black";
         if(hasadminrole){
             color="red";
         }

   %>
   <font color="<%=color%>"><c:out  value="${user.name}"/></font>
</c:foreach>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品视频大全| 日本高清不卡的在线| 少妇高潮久久久久久潘金莲| 亚洲成人亚洲激情| 亚洲精品中文字幕女同| 韩日精品中文字幕| 日韩在线免费视频| 国产一区深夜福利| 欧美视频不卡中文| 91高清免费视频| 国内精品小视频| 国产欧美日韩综合精品| 日韩在线视频免费观看| 福利视频一区二区| 一个人看的www久久| 91九色单男在线观看| 亚洲自拍小视频免费观看| 国产精品一区二区三区免费视频| 久久久国产影院| 精品亚洲一区二区| 精品国产欧美一区二区五十路| 成人性生交大片免费观看嘿嘿视频| 亚洲欧美中文字幕在线一区| 色yeye香蕉凹凸一区二区av| 伊是香蕉大人久久| 欧美日本精品在线| 欧美一区二区视频97| 欧美精品videos另类日本| 久久国产精品免费视频| 久久6免费高清热精品| 亚洲精品国产欧美| 国产做受69高潮| 亚洲国产精品va| 亚洲精品久久久久久久久久久久| 国产精品久久久久77777| 国产精品久久电影观看| 久久久伊人欧美| 91久久夜色精品国产网站| 欧美高清电影在线看| 亚洲国内精品视频| 精品视频www| 国产成人拍精品视频午夜网站| 国产中文日韩欧美| 91国产中文字幕| 欧美日韩精品在线播放| 日韩中文在线观看| 日韩欧美在线视频观看| 亚洲理论电影网| 91理论片午午论夜理片久久| 欧美日韩高清区| 久久精品视频免费播放| 欧美大片在线免费观看| 亚洲综合精品一区二区| 亚洲国产高潮在线观看| 亚洲精品福利免费在线观看| 国产在线久久久| 久久久免费电影| 精品中文字幕久久久久久| 91精品国产综合久久男男| 亚洲成人三级在线| 亚洲一区亚洲二区| 国产97人人超碰caoprom| 日本sm极度另类视频| 亚洲欧美日韩精品久久奇米色影视| 久久久久在线观看| 午夜免费久久久久| 国产成人涩涩涩视频在线观看| 亚洲老司机av| 日韩视频免费观看| 国自在线精品视频| 亚洲美女久久久| 久久精品99久久香蕉国产色戒| 日韩精品免费一线在线观看| 国产欧美欧洲在线观看| 亚洲精品国精品久久99热一| 日韩国产精品视频| 亚洲精品视频在线播放| 久久精品电影一区二区| 亚洲va电影大全| 日韩在线观看免费高清完整版| 亚洲精品视频中文字幕| 久99九色视频在线观看| 国产精品久久久久久亚洲影视| 91av网站在线播放| 国产香蕉精品视频一区二区三区| 国产精品狠色婷| 久久亚洲综合国产精品99麻豆精品福利| 精品久久久久久久久久ntr影视| 538国产精品一区二区在线| 欧美激情区在线播放| 久久中文精品视频| 一区二区三区视频免费在线观看| 久久艹在线视频| 国内精品视频在线| 欧美中文字幕在线播放| 日韩av不卡电影| 在线国产精品播放| 亚洲精品美女久久久| 91亚洲精品在线| 精品日本高清在线播放| 亚洲精品456在线播放狼人| 亚洲国产天堂久久综合| 欧美日韩国产页| 亚洲曰本av电影| 亚洲国产欧美一区二区丝袜黑人| 91av网站在线播放| 欧美超级免费视 在线| 亚洲伊人一本大道中文字幕| 色婷婷综合久久久久| 成人国产精品一区| 国产成人综合亚洲| 久久在线免费观看视频| 国内精品久久久久影院 日本资源| 亚洲福利视频在线| 久久久久这里只有精品| 亚洲一区二区精品| 亚洲第一区在线| 97avcom| 亚洲国产精品一区二区久| 色婷婷亚洲mv天堂mv在影片| 少妇久久久久久| 欧美激情一区二区三区久久久| 国产精品一区=区| 亚洲www在线| 国产精品久久99久久| 欧美影院在线播放| 久久久国产91| 欧美野外wwwxxx| 国产香蕉一区二区三区在线视频| 国产精品福利小视频| 国产精品大陆在线观看| 国产精品久久久久久久一区探花| 亚洲成人在线视频播放| 欧美激情精品久久久久久黑人| 欧美日韩国产一区中文午夜| 欧美激情一区二区三区久久久| 国产做受高潮69| 2019日本中文字幕| 日韩精品黄色网| 欧美视频裸体精品| 亚洲美女在线观看| 不卡中文字幕av| 久久久精品久久| 亚洲国产欧美一区| 欧美高清视频在线观看| 久久久久久91香蕉国产| 欧美日韩国产综合新一区| 高跟丝袜一区二区三区| 在线视频日本亚洲性| 日日狠狠久久偷偷四色综合免费| 日韩在线视频免费观看高清中文| 日韩在线播放视频| 亚洲石原莉奈一区二区在线观看| 最近2019好看的中文字幕免费| 欧美在线视频一区| 国产一区二区三区在线免费观看| 国产午夜精品视频免费不卡69堂| 亚洲国产天堂久久综合网| 国产精品中文字幕久久久| 日韩欧美精品免费在线| 色噜噜亚洲精品中文字幕| 欧美色道久久88综合亚洲精品| 色噜噜狠狠狠综合曰曰曰88av| 国产精品免费久久久久久|