Доступ к переменным между вложенными тегами JSP - PullRequest
4 голосов
/ 03 апреля 2010

Я хотел бы обмениваться информацией между двумя вложенными артефактами 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 для тегов таблицы и столбца.

Я также хотел бы узнать, как получить доступ к атрибуту, определенному родительским тегом (в этом примере я хотел бы получить доступ к содержимому атрибута данных в table.tagx из column.tagx).

Таким образом, все сводится к тому, как я могу получить доступ к переменным между вложенными тегами JSP, которые просто реализуются через сами определения тегов (реализация Java TagHandler не требуется)?

1 Ответ

2 голосов
/ 11 февраля 2011

Идея состоит в том, чтобы поделиться данными в объеме запроса:

  1. В таблице myNs: создайте переменную-заполнитель области запроса для хранения данных (в вашем случае вам понадобятся две из них: одна для свойств и другая для меток):

    <c:set var="properties" scope="request" />
    <c:set var="labels" scope="request" />
    
  2. Затем вызовите теги столбцов с помощью <jsp:doBody />, чтобы столбцы могли заполнять заполнители.
  3. В столбце 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>
    
  4. Теперь, после того как вы вызвали <jsp:doBody /> в своей таблице myNs: вы получили заполненные значения, все, что вам нужно, это разделить строку, используя запятую в качестве разделителя, и затем делать все, что вы хотите:

    <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 .

...