jsp的C標籤一般使用方法以及js接收servlet中的物件及物件數字

funnyZpC發表於2017-09-02

 jsp的C標籤一般使用方法以及js接收servlet中的物件及物件陣列

 

  由於現流行的javaWeb框架提倡前後端分離,比如在SpringMvc中已經很少寫servlet的一些東西;目前 前端jsp中大多是一些純html和js,很少用到jstl的一堆東西,後端也僅僅處理一些前端的post、get請求或頁面跳轉,無須以往繁瑣的xml路徑對映和filter過濾。

  不過有時也會用到servlet作用域中的一些東西,比如某個固定的值、上下文路徑等等~,不過這些東西大多數也僅限於取值而不是設定值(或物件),所以sun給了一個非常簡潔的取值方式:C標籤!

  下面將簡述下C標籤的一些使用方法,主要是我個人從事javaWeb開放所涉及到的內容,不做多的擴充套件(◕ܫ◕)=>

在使用之前,頁面名稱空間需要先宣告C標籤和jsp的基本宣告 ,這是最基本的,順便說下:如果引用到jar包,也是在這裡宣告的,如下==>

當後端傳給頁面一個單獨的值的時候用${鍵}即可獲取傳入的值(在這裡是stockPrice這個Float值),這個鍵可以是java任何型別(比如常用的List、map、String、Date、Object...等等)=>

 

  

 以上只是單值,如果是物件型別或者Map型別,就需要打點訪問值了,例如後臺是這樣子的:

jsp中在取值的時候就像js中取物件中的值一樣,就像這樣==>

 

 

stockPrice2中的值是個List的時候同js中list值訪問一樣,用中括號=>

以上取值的方式有仨:[陣列下標]、["陣列下標"]、.get(下標),需要說明的是下標是不能用單引號引起來的,在一就是取的陣列長度如果是動態長度的,上面的這些方式就需要加一層判斷,but~這樣的方式十分之不可取,這時候就需要用到 forEach=>

 

 

使用forEach的時候需要用到forEach標籤,即使陣列為空也無需要判斷空值,需要說明的是遍歷的物件放在items中,每個物件中的每個子物件用var中的值代替子物件的整個物件,後面的varStatus這個變數是存的每個變數的狀態,一般也會使用到就是物件所在的下標(需要用index這個變數名稱,並且這個變數名稱是固定的,無須在後端定義),如果需要過濾物件中的某個值,就需要用到if標籤了,這個標籤可以巢狀在迴圈裡面使用也可以單獨使用~=>

        嗯~,需要條件判斷的時候就需要會用到if~else~這樣的條件判斷,在C標籤中,這個判斷需要寫在choose標籤中,可能比較麻煩,這裡只給出程式碼樣例=>

<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>

如上圖,判斷每個條件需要寫在c:when標籤中(可以有多個此標籤),如果條件都不滿足,則會顯示c:otherwise標籤中的內容,樣例效果自行測試,這裡就不囉嗦啦(o^.^o)~

啊哈~,以上是C標籤常用的一些懂西,哦~ 不好意思,漏了一個(*^▽^*),這個比較特殊:多數人在使用判斷的時候會用到條件是否為空,是否等於某個值:

對於前者,條件一般是這樣寫=>${empty 變數名},這個empty在jsp中是關鍵字,變數名稱一定要避開啊~w(゚Д゚)w

對於後者,寫法一般有兩種=>${變數名A eq 變數名B} 或者 ${變數名A == 變數名B},後者一般做數字或基本型別的判斷,前者一般做物件判斷;別忘了,這個“eq”也是關鍵字o哦~

 

        最後,這次當然是最最後哈( ̄▽ ̄)/,放一個大招,也是我研究了好一會憋出來的;當然,不是噁心便便( ´´ิ∀´ิ` )。。。,先說下摘要吧:一般jsp處理不了的邏輯或者比較麻煩的邏輯需要將servlet作用域中的(List或Map) 放在js中處理,這時就可能面臨一個問題,就是你怎麼能將整個物件放到js變數裡面呢,在這裡可以很自信的Answer你:用fastJson轉字串啊~ㄟ(◑‿◐ )ㄏ,是不是豁然開朗,哈哈,先拋個磚=>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 <%@ taglib uri="/WEB-INF/tlds/hs.tld" prefix="hs"%>
4 <%@ page import="com.alibaba.fastjson.JSON" %>
1 <script type="text/javascript">
2 <%    Object ob=request.getAttribute("bonusMatrix");    %>
3 //初始化資料    
4 var bonusMatrixs=[];
5 function init(data){
6     bonusMatrixs=data;
7 }
8 init(<%out.println(JSON.toJSONString(ob));%>);
9 </script>

並且~,不需要做json字串到js物件的轉換就可以直接使用~,有沒有很方便的說└(^o^)┘

啊~,哇哦~已經這個點兒了,要睡覺啦~

 

 

//看到這裡的童鞋,希望他們 ☛熱愛技術,關愛妹紙,關愛單身狗,遠離加班,遠離改需求ㄟ(▔▽▔ㄟ) (╯▔▽▔)╯

 

 

相關文章