由于現(xiàn)流行的javaWeb框架提倡前后端分離,比如在SpringMvc中已經(jīng)很少寫servlet的一些東西;目前 前端jsp中大多是一些純html和js,很少用到j(luò)stl的一堆東西,后端也僅僅處理一些前端的post、get請(qǐng)求或頁(yè)面跳轉(zhuǎn),無須以往繁瑣的xml路徑映射和filter過濾。
不過有時(shí)也會(huì)用到servlet作用域中的一些東西,比如某個(gè)固定的值、上下文路徑等等~,不過這些東西大多數(shù)也僅限于取值而不是設(shè)置值(或?qū)ο?,所以sun給了一個(gè)非常簡(jiǎn)潔的取值方式:C標(biāo)簽!
下面將簡(jiǎn)述下C標(biāo)簽的一些使用方法,主要是我個(gè)人從事javaWeb開放所涉及到的內(nèi)容,不做多的擴(kuò)展(???)=>
在使用之前,頁(yè)面命名空間需要先聲明C標(biāo)簽和jsp的基本聲明 ,這是最基本的,順便說下:如果引用到j(luò)ar包,也是在這里聲明的,如下==>

當(dāng)后端傳給頁(yè)面一個(gè)單獨(dú)的值的時(shí)候用${鍵}即可獲取傳入的值(在這里是stockPrice這個(gè)Float值),這個(gè)鍵可以是java任何類型(比如常用的List、map、String、Date、Object...等等)=>


以上只是單值,如果是對(duì)象類型或者Map類型,就需要打點(diǎn)訪問值了,例如后臺(tái)是這樣子的:

jsp中在取值的時(shí)候就像js中取對(duì)象中的值一樣,就像這樣==>


stockPrice2中的值是個(gè)List的時(shí)候同js中l(wèi)ist值訪問一樣,用中括號(hào)=>



以上取值的方式有仨:[數(shù)組下標(biāo)]、["數(shù)組下標(biāo)"]、.get(下標(biāo)),需要說明的是下標(biāo)是不能用單引號(hào)引起來的,在一就是取的數(shù)組長(zhǎng)度如果是動(dòng)態(tài)長(zhǎng)度的,上面的這些方式就需要加一層判斷,but~這樣的方式十分之不可取,這時(shí)候就需要用到 forEach=>



使用forEach的時(shí)候需要用到forEach標(biāo)簽,即使數(shù)組為空也無需要判斷空值,需要說明的是遍歷的對(duì)象放在items中,每個(gè)對(duì)象中的每個(gè)子對(duì)象用var中的值代替子對(duì)象的整個(gè)對(duì)象,后面的varStatus這個(gè)變量是存的每個(gè)變量的狀態(tài),一般也會(huì)使用到就是對(duì)象所在的下標(biāo)(需要用index這個(gè)變量名稱,并且這個(gè)變量名稱是固定的,無須在后端定義),如果需要過濾對(duì)象中的某個(gè)值,就需要用到if標(biāo)簽了,這個(gè)標(biāo)簽可以嵌套在循環(huán)里面使用也可以單獨(dú)使用~=>


嗯~,需要條件判斷的時(shí)候就需要會(huì)用到if~else~這樣的條件判斷,在C標(biāo)簽中,這個(gè)判斷需要寫在choose標(biāo)簽中,可能比較麻煩,這里只給出代碼樣例=>
<select class="btn col-sm-12"style="font-weight:bold;color:black;pointer-events: stroke;opacity: initial;"> <c:if test="${empty main.scoreC}"><option value="">(空)</option></c:if> <c:forEach items="${scores}" var="score" > <c:choose> <c:when test="${main.scoreC eq score}"> <option value="${score}" selected="selected">${score}</option> </c:when> <c:otherwise> <option value="${score}">${score}</option> </c:otherwise> </c:choose> </c:forEach> </select>如上圖,判斷每個(gè)條件需要寫在c:when標(biāo)簽中(可以有多個(gè)此標(biāo)簽),如果條件都不滿足,則會(huì)顯示c:otherwise標(biāo)簽中的內(nèi)容,樣例效果自行測(cè)試,這里就不啰嗦啦(o^.^o)~
啊哈~,以上是C標(biāo)簽常用的一些懂西,哦~ 不好意思,漏了一個(gè)(*^▽^*),這個(gè)比較特殊:多數(shù)人在使用判斷的時(shí)候會(huì)用到條件是否為空,是否等于某個(gè)值:
對(duì)于前者,條件一般是這樣寫=>${empty 變量名},這個(gè)empty在jsp中是關(guān)鍵字,變量名稱一定要避開啊~w(?Д?)w
對(duì)于后者,寫法一般有兩種=>${變量名A eq 變量名B} 或者 ${變量名A == 變量名B},后者一般做數(shù)字或基本類型的判斷,前者一般做對(duì)象判斷;別忘了,這個(gè)“eq”也是關(guān)鍵字o哦~
最后,這次當(dāng)然是最最后哈( ̄▽ ̄)/,放一個(gè)大招,也是我研究了好一會(huì)憋出來的;當(dāng)然,不是惡心便便( ´´?∀´?` )。。。,先說下摘要吧:一般jsp處理不了的邏輯或者比較麻煩的邏輯需要將servlet作用域中的(List或Map) 放在js中處理,這時(shí)就可能面臨一個(gè)問題,就是你怎么能將整個(gè)對(duì)象放到j(luò)s變量里面呢,在這里可以很自信的Answer你:用fastJson轉(zhuǎn)字符串啊~ㄟ(??? )ㄏ,是不是豁然開朗,哈哈,先拋個(gè)磚=>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="/WEB-INF/tlds/hs.tld" prefix="hs"%><%@ page import="com.alibaba.fastjson.JSON" %>
<script type="text/javascript"><% Object ob=request.getAttribute("bonusMatrix"); %>//初始化數(shù)據(jù) var bonusMatrixs=[];function init(data){ bonusMatrixs=data;}init(<%out.println(JSON.toJSONString(ob));%>);</script>并且~,不需要做json字符串到j(luò)s對(duì)象的轉(zhuǎn)換就可以直接使用~,有沒有很方便的說└(^o^)┘

啊~,哇哦~已經(jīng)這個(gè)點(diǎn)兒了,要睡覺啦~

以上這篇淺談jsp的C標(biāo)簽一般使用方法以及js接收servlet中的對(duì)象及對(duì)象數(shù)組就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VeVb武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選