簡體   English   中英

任何方式使用jjl自定義標簽的ajax而不在javascript中復制標簽?

[英]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>

您可以輕松地將其containercontainer 您可以使用jsp頁面生成html。

我在相同的情況下使用了至少兩個(或多或少相似)的解決方案。

  1. 使用包含的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來呈現有關單個產品的信息。

  2. 您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM