我想在两个嵌套的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.tagx和column.tagx.