我想知道是否可以将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有bug,默认情况下它不会添加JSTL库。您可以通过库来修复它 - >添加库 - >导入 - &gt; Jstl 1.1-&gt;添加库
答案 0 :(得分: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罐子以及从哪里下载。