【问题标题】:Access variables between nested JSP tags访问嵌套 JSP 标记之间的变量
【发布时间】:2011-02-03 22:01:55
【问题描述】:

我想在两个嵌套的 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 应该显示嵌套列标签中定义的数据列。问题是如何从 table 标记访问嵌套列标记的属性和标签属性的值。我尝试了 jsp:directive.variable 但这似乎只能在 jsp 和标签之间交换信息,而不是在嵌套标签之间。

注意,我想完全避免对表和列标签使用 java 支持对象。

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

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

【问题讨论】:

  • 如果不使用自定义 java 标签,我认为您无法做到这一点。

标签: java jsp jsp-tags


【解决方案1】:

想法是在请求范围内共享数据:

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

    <c:set var="properties" scope="request" />
    <c:set var="labels" scope="request" />
    
  2. 然后通过&lt;jsp:doBody /&gt; 调用您的列标签,以便列可以填充占位符。
  3. 在 myNs:column 中填充占位符,记住将它们保持在请求范围内:

    <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>
    
  4. 现在,在您在 myNs:table 中调用 &lt;jsp:doBody /&gt; 后,您得到了填充的值,您只需使用逗号作为分隔符拆分字符串,然后做任何您想做的事情:

    <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

【讨论】:

  • 如果将变量放在请求范围内,如果页面上有多个 标签会不会很乱?我认为它应该放在页面范围内,这在 JSP 标记中意味着它的范围仅限于该 JSP 标记和它调用的内容,并且不会泄漏到调用 JSP 页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 2014-07-30
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 2019-06-24
  • 2015-04-17
相关资源
最近更新 更多