2

调用我的时出现以下错误testtag.jsp

org.apache.jasper.JasperException:无法将字符串“<c:out var='myvar'/>”转换为属性“att1”的类“javax.servlet.jsp.tagext.JspFragment”:属性编辑器未注册属性编辑器管理器

(详细的堆栈跟踪无关紧要)

我使用的是 J2EE 1.4 服务器(即 JSP 2.0)

我的WEB-INF/testtag.tag

<%@ tag body-content="scriptless" %>
<%@ tag description="Renders some test html" %>
<%@ attribute name="att1" fragment="true" required="true"  %>

<h1><jsp:invoke fragment="att1"/></h1>

testtag.jsp使用这个标签的jsp :

<%@page contentType ="text/html" pageEncoding="UTF-8" buffer="none" session="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<c:set var="myvar" value="hello world"/>
<t:testtag att1="<c:out var='myvar'/>" />
4

1 回答 1

4

根据JSP 2.0 规范的 JSP.7.1.6 (粗体强调我的),

在翻译阶段,页面的各个部分被翻译成javax.servlet.jsp.tagext.JspFragment抽象类的实现,然后传递给标记处理程序。对于在 TLD中声明为片段或类型为 的命名属性(由 定义的属性)主体中的任何 JSP 代码,这将自动完成。<jsp:attribute>JspFragment

也就是说,在testtag.jsp片段中应该以其他方式传递:

<%@page contentType ="text/html" pageEncoding="UTF-8" buffer="none" session="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<c:set var="myvar" value="hello world"/>
<t:testtag>
    <jsp:attribute name="att1"><c:out value='${myvar}'/></jsp:attribute>
</t:testtag>
于 2012-09-27T14:38:02.423 回答