通过属性或正文将 XML 文档传递给 JSP 自定义标记

2024-02-26

我想知道是否可以将 xml 文档传递给purejstl 定义的 JSP 自定义标记可以是: 自定义标签的正文,例如:

<mt:mytag>
    <people>
        <person name="bob" age="23" />
        <person name="sue" age="45" />
        <person name="moe" age="35" />
    </people>
<mt:mytag>

或者作为标签的属性,如下所示:

<mt:mytag message="http://link.to.document.xml" />

这是标签本身

<%@tag description="xml parser" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
<%@attribute name="message"%> OR <jsp:doBody var="message" />
<x:parse var="a" doc="${message}" />
<x:forEach var="current" select="$a/people/person">
    <ul>
        <li>
            Name <x:out select="$current/@name" /> age <x:out select="$current/@age" />
        </li>
    </ul>
</x:forEach>

可以从 jsp 页面内部使用 jstl 处理 xml,基本上是复制 forEach 之后的代码并粘贴到 jsp 中。它甚至可以将 xml 作为页面请求中的 POST/GET 参数获取,并在页面中对其进行处理。

否则,在做上面的例子时,会出现各种这样的错误:

PWC6197: An error occurred at line: 9 in the jsp file: /WEB-INF/tags/test2.tag
PWC6199: Generated servlet error:
cannot access javax.servlet.jsp.jstl.core.LoopTagSupport
class file for javax.servlet.jsp.jstl.core.LoopTagSupport not found

PWC6197: An error occurred at line: 9 in the jsp file: /WEB-INF/tags/test2.tag
PWC6199: Generated servlet error:
cannot find symbol
symbol:   method setPageContext(javax.servlet.jsp.PageContext)
location: variable _jspx_th_x_forEach_0 of .......

请注意,完全可以在非纯 JSTL(使用 java 代码)中处理正文内容或属性链接,只是想知道 JSTL+EL 是否有这样的功能。

编辑:分辨率

看起来 Netbeans IDE 有一个bug http://netbeans.org/bugzilla/show_bug.cgi?id=188765默认情况下它不添加 JSTL 库。您可以通过 Libraries->Add Library->Import->Jstl 1.1->Add Library 修复它


这有效。

<%@ taglib tagdir="/WEB-INF/tags" prefix="mt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
<c:set var="message">
    <people>
        <person name="bob" age="23" />
        <person name="sue" age="45" />
        <person name="moe" age="35" />
    </people>
</c:set>
<mt:mytag message="${message}" />

实际上,您的第一个代码块(使用主体)也适合我。 如果您想使用文件,请使用以下内容。

<%@ taglib tagdir="/WEB-INF/tags" prefix="mt" %>
<mt:mytag messageUrl="http://link.to.document.xml" />

和标签文件;

<%@tag description="xml parser" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
<%@attribute name="messageUrl"%>
<c:import url="${messageUrl}" var="message" />
<x:parse var="a" doc="${message}" />
<x:forEach var="current" select="$a/people/person">
    <ul>
        <li>
            Name <x:out select="$current/@name" /> age <x:out select="$current/@age" />
        </li>
    </ul>
</x:forEach>

关于您的错误消息,请告诉我们您正在使用哪个网络服务器。还请告诉我们您从何处下载了哪些 JSTL jar。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过属性或正文将 XML 文档传递给 JSP 自定义标记 的相关文章

随机推荐