我想做类似的事情来调用JSP 2.0标记:
<mytags:foo abc="<%=def%>">
<mytags:bar ghi="<%=jkl%>"/>
</mytags:foo>
字符串def
和jkl
在jsp文件中定义了earielr。假设我的标记文件如下所示:
foo.tag
:
<%@ tag body-content="scriptless" %>
<%@ attribute name="abc" required="true" %>
<div class="${abc}">
<jsp:doBody/>
</div>
bar.tag
:
<%@ tag body-content="scriptless" %>
<%@ attribute name="ghi" required="true" %>
<div>${ghi}</div>
我希望输出看起来像这样:
<div class="def">
<div>jkl</div>
</div>
(假设变量def
和jkl
分别在调用JSP文件中初始化为def
和jkl
。)
外部标记的属性很好(<div class="def">
),但内部属性失败。
这可能吗?我收到jkl无法解决的错误。
答案 0 :(得分:4)
请注意tag指令中的body-content="scriptless"
属性。这意味着标记包围的主体不能包含scriptlet代码(<% %>
内容)。你需要使用EL。
如果我将JSP中的内容更改为:
,它对我有用 <c:set var="def" value="def"></c:set>
<c:set var="jkl" value="jkl"></c:set>
<mytags:foo abc="${def}">
<mytags:bar ghi="${jkl}"/>
</mytags:foo>
请注意,我需要添加
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>