我想在两个嵌套的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实现)?
答案 0 :(得分:2)
我们的想法是在请求范围内共享数据:
在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>
现在,在你的myNs:table中调用了<jsp:doBody />
后,你得到了填充的值,你只需要用逗号分隔字符串作为分隔符,然后做你想做的任何事情:
<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。