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