【问题标题】:Custom JSP Tag which include another JSP包含另一个 JSP 的自定义 JSP 标记
【发布时间】:2015-12-08 10:43:24
【问题描述】:

我想创建一个自定义的JSP标签如下。

<ng:template src="../js/Rule/templates/rule-list.jsp" />

这实际上将在脚本标签中包含文件“../js/Rule/templates/rule-list.jsp”并生成如下 HTML。

<script type="text/ng-template" id="../js/Rule/templates/rule-list.jsp">
    Content of ../js/Rule/templates/rule-list.jsp file
</script>

到目前为止,我已经创建了以下标记文件。

<%@ attribute name="src" required="true" rtexprvalue="true" %>
<script type="text/ng-template" id="${src}">
    <%@ include file="${src}" %>
</script>

这是什么错误

找不到文件“${src}”

意味着它试图包含 ${src} 的值。谁能建议如何从指定的属性值将文件包含在标记文件中?

注意:我使用的是 angularjs。我想在没有 ajax 调用的情况下加载 angularjs 模板。因为我的浏览器无法加载带有 AJAX 调用的 ng-template 以解决跨域调用问题。

【问题讨论】:

  • 您的JSP 文件是否在您的WEB-INF 文件夹中?
  • 我的 src 属性将保存 JSP 文件路径。相对于使用标签的文件。但是那些 JSP 文件不会存储在 WEB-INF 中。只有包含标签定义的标签文件“template.tag”可以存储在WEB-INF

标签: java angularjs jsp taglib angularjs-ng-template


【解决方案1】:

知道了。我需要使用动态包含作为

<jsp:include page="${src}" />

这工作正常。

【讨论】:

    【解决方案2】:

    WEB-INF 目录是一个特殊目录,它属于您的 Web (Servlet) 应用程序的公共目录树的一部分。

    Servlet Specification 状态(第 70 页左右):

    应用程序层次结构中存在一个特殊目录,名为 “网络信息”。该目录包含所有与 不在应用程序文档根目录中的应用程序。 该 WEB-INF 节点不是公共文档树的一部分 应用程序。 WEB-INF 目录中不包含任何文件 通过容器直接发送给客户端。但是,该文件的内容 WEB-INF 目录对使用 getResource 的 servlet 代码可见,并且 getResourceAsStream 方法调用 ServletContext,并且可能是 使用 RequestDispatcher 调用公开。

    AngularJS 看不到您的 Web 应用程序 WEB-INF 文件夹中的任何文件夹,因为它没有“连接”。

    您必须将这些模板文件添加到公共文件夹中,您的 Angular 模板文件可以查看。

    【讨论】:

    • :) 需要使用动态包含。感谢您的回答。
    • 很高兴能帮上忙。不要忘记回答有效/有帮助的正确答案。 :)
    • 我在公共文件夹中有这些模板文件。我的角度应用程序运行良好。我只是想改变模板加载的方式。因为我的生产服务器不支持通过 AJAX 调用模板加载跨域相关问题。
    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2012-06-06
    相关资源
    最近更新 更多