如何访问嵌套 JSP 标记文件中的父属性?

Posted

技术标签:

【中文标题】如何访问嵌套 JSP 标记文件中的父属性?【英文标题】:How to access parent attribute in a nested JSP Tag File? 【发布时间】:2014-07-30 09:59:22 【问题描述】:

我一定是盲目的或使用了错误的搜索词,因为我无法找到一个好的答案。

我有两个自定义 JPS 标记文件。一个将嵌套在另一个中。如何从子标签内部访问父标签中的属性?

一种解决方法是向请求范围添加一个变量,但我不喜欢这个选项,它可能会导致一些问题。有没有更直接的选择?

谢谢!

<%-- OuterTag.tag --%>
--------------------------------------
<%@tag %>
<%@attribute name="color" required="true" %>
<c:set var="color" value="$color" scope="request" /> <%-- I'm trying to avoid doing this --%>
<div>
   <jsp:doBody/>
</div>


<%-- InnerTag.tag --%>
--------------------------------------
<%@tag %>
<p style="background-color: $parent.color"/> <%-- I want to do something like this --%>



<%-- Example Usage --%>
--------------------------------------
<custom:OuterTag color="red">
    <custom:InnerTag/>
    <custom:InnerTag/>
    <custom:InnerTag/>
</custom:OuterTag>

【问题讨论】:

没有接受者?这是一个愚蠢的问题吗?似乎它应该如此简单。我以为它会在 15 分钟内得到答复。大声笑 【参考方案1】:

您在这里尝试做的事情是完全合乎逻辑的 - 自定义标签和标签文件应该允许我们实现。此行为是基于实现的 - 并且已在 Apache see here 上修复。你用的是什么容器?我在 Jetty 中遇到了类似的问题,并提交了另一个已确认但尚未解决的错误。

【讨论】:

【参考方案2】:

您可以使用以下方法找到您的父标签:

ParentTag parent = (ParentTag)findAncestorWithClass(this, ParentTag.class);

然后,您可以在父级上设置公共方法,子级可以使用它与之交互。

查看此网址了解更多详情:http://www.informit.com/articles/article.aspx?p=26119&seqNum=9

【讨论】:

这仅适用于成熟的自定义标签,不适用于 OP 正在使用或询问的标签文件。

以上是关于如何访问嵌套 JSP 标记文件中的父属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ember.js 访问嵌套索引路由中的父模型?

如何访问JSP中的servlet设置的请求属性?

AngularJS 从子控制器访问父范围

less样式如何使用cssmodule

如何使用 Struts 嵌套标记库从 HashSet 字段属性中获取项目?

如何从jsp标签内部访问函数中的变量