java – 嵌套JSP标记之间的访问变量

我想在两个嵌套的JSP tagx工件之间交换信息.举个例子:

list.jspx

<myNs:table data="${myTableData}">
    <myNs:column property="firstName" label="First Name"/>
    <myNs:column property="lastName" label="Last Name"/>
</myNs:table>

现在,table.tagx应该显示嵌套列标记中定义的数据列.问题是如何从表标记访问嵌套列标记的属性值和标签属性.我尝试了jsp:directive.variable,但似乎只能在jsp和标签之间交换信息,而不是在嵌套标签之间交换信息.

注意,我想避免对表和列标签使用java后备对象.

我还想知道如何访问由父标记定义的属性(在此示例中,我想从column.tagx访问table.tagx中data属性的内容).

因此,它归结为如何在嵌套的JSP标记之间访问变量,这些标记纯粹是通过标记定义本身实现的(不需要Java TagHandler实现)?

最佳答案 我们的想法是在请求范围内共享数据:

>在myNs:table中创建一个请求范围的占位符变量来保存数据(在您的情况下,您将需要其中两个:一个用于属性,另一个用于标签):

<c:set var="properties" scope="request" />
<c:set var="labels" scope="request" />

>然后通过< jsp:doBody />调用列标签这样列可以填充占位符.
>在myNs:列中填充占位符,请记住将它们保留在请求范围内:

<c:choose>
  <c:when test="${empty properties}" scope="request">
    <c:set var="properties" value="${property}" scope="request" />
  </c:when>
  <c:otherwise>
    <c:set var="properties" value="${properties},${property}" scope="request" />
  </c:otherwise>
</c:choose>

>现在,在您调用< jsp:doBody />之后在myNs:table中,您获得了填充的值,您只需要使用逗号分隔字符串作为分隔符然后执行任何操作:

<table>
  <thead>
    <tr>
      <c:forTokens items="${labels}" delims="," var="label">
        <th><c:out value="${label}" /></th>
      </c:forTokens>
  </thead>
</table>

P.S.:那些积分归于Spring Roo的家伙,看看他们的table.tagxcolumn.tagx.

点赞