我想知道是否可以通过以下方式将xml文档传递给 纯 jstl定义的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似乎有一个错误,即默认情况下不添加JSTL库。您可以通过库->添加库->导入-> Jstl 1.1->添加库来修复它
这可行。
<%@ 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>
关于您的错误消息,请告诉我们您正在使用哪个Web服务器。还请告诉我们您下载了哪些JSTL jar,以及从何处下载。