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