[英]any way to use ajax with jstl customtags without duplicating tags in javascript?
我正在一個頁面上正常加載部分內容,並使用jsps呈現頁面。 在該頁面上生成的產品圖像和鏈接是通過自定義jstl標記。
當用戶滾動時,在JSON響應中從服務器請求更多產品,然后使用UnderscoreJS模板將它們呈現並添加到頁面底部。 有沒有什么辦法可以在Javascript中使用JSTL標簽,而無需使用javascript函數重新創建它們(不可能在javascript中重新創建所有這些標簽)。
處理這種情況的最佳方法是什么? 我想我可以為ajax調用返回一個渲染的html響應,但這意味着我有一些使用json的ajax請求和一些使用渲染的html ...
您不能在JavaScript中重復使用JSTL標記,因為它們是Java而不是JavaScript,並且因為它們在呈現頁面時在服務器端執行,而不是在客戶端上執行。
但是,既然你的JavaScript已經可以獲取並呈現數據,那么為什么不放棄使用JSTL渲染第一部分,並在JavaScript / Ajax / UnderscoreJS中完成所有工作呢?
解決此問題的一種方法是使AJAX
方法返回HTML
而不是普通對象。
您可以編寫一個jsp頁面,該頁面將為新記錄創建html,並將html作為響應發送,該響應可以附加到之前的內容中。
防爆
假設您的頁面是這樣的
<div class="container">
<div class="record rec-1">
//some html code
</div>
<div class="record rec-2">
//some html code
</div>
.....
.....
<div class="record rec-n">
//some html code
</div>
</div>
然后當你想加載更多的內容並進行ajax調用時,讓服務器返回一個處理過的html響應
<div class="record rec-n+1">
//some html code
</div>
<div class="record rec-n+2">
//some html code
</div>
.....
.....
<div class="record rec-n+k">
//some html code
</div>
您可以輕松地將其container
到container
。 您可以使用jsp頁面生成html。
我在相同的情況下使用了至少兩個(或多或少相似)的解決方案。
使用包含的JSP。 第一個請求(包含產品圖像和鏈接列表的頁面)應返回整個頁面的JSP,例如
<%@page contentType="text/html; charset=UTF-8"%> <!DOCTYPE html> <html> ... skipped ... <c:forEach items="${products}" var="product"> <%@include file="productInfo.jsp"%> </c:forEach> ... skipped ... </html>
第二個請求(繼續列表的AJAX請求)應該返回帶有請求的列表部分的JSP:
<c:forEach items="${products}" var="product"> <%@include file="productInfo.jsp"%> </c:forEach>
其內容可以由瀏覽器中的AJAX響應處理程序插入到DOM中,而無需任何其他處理。 請注意,兩個響應都包含相同的JSP來呈現有關單個產品的信息。
您可以使用JSP標記代替<%@include file="..."%>
。 其余看起來類似:整個頁面的JSP
<%@page contentType="text/html; charset=UTF-8"%> <!DOCTYPE html> <html> ... skipped ... <c:forEach items="${products}" var="product"> <tag:productInfo product="${product}" /> </c:forEach> ... skipped ... </html>
帶有請求部分列表的JSP:
<c:forEach items="${products}" var="product"> <tag:productInfo product="${product}" /> </c:forEach>
這樣,您可以為單個視圖(AJAX和非AJAX)重用單個視圖(JSP),並消除AJAX的第二種渲染機制(從JavaScript創建JSON +手動DOM片段)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.