У меня есть простое требование: число столбцов в моем <tr:table/>
является динамическим. У меня будет список объектов, someBean.features
, который будет определять количество отображаемых столбцов.
Следующая диаграмма должна прояснить мое требование.
В коде, который мне дали, было использование тега JSTL <c:forEach/>
, что, очевидно, создавало проблемы при использовании в среде JSF. Они сделали что-то вроде этого:
<tr:table value="#{someBean.values}">
<tr:column headerText="Name">
<tr:outputText value="#{someBean.name}"/>
</tr:column>
<c:forEach var="col" items="#{someBean.features}">
<tr:column headerText="Column-#{col.id}">
<tr:outputText value="#{col.name}"/>
</tr:column>
</c:forEach>
</tr:table>
Но когда я профилировал приведенный выше код, метод someBean.getValues
, который является входом для тега <tr:table/>
выше, вызывался несколько тысяч раз, а не примерно 20. Это - как я выяснил - было связано с тот факт, что тег <c:forEach/>
является тегом времени компиляции, где <tr:*/>
- теги времени рендеринга.
Итак, вот что я намерен сделать (заменить <c:forEach/>
на <tr:iterator/>
:
<tr:table value="#{someBean.values}">
<tr:column headerText="Name">
<tr:outputText value="#{someBean.name}"/>
</tr:column>
<tr:iterator var="col" value="#{someBean.features}">
<tr:column headerText="Column-#{col.id}">
<tr:outputText value="#{col.name}"/>
</tr:column>
</tr:iterator>
</tr:table>
Но по какой-то причине <tr:iterator/>
не похоже на то, что его помещают в <tr:table/>
, и он никогда не выполняется.
Любое решение, советы, рекомендации будут с благодарностью.
Да, и мы используем JSF 1.1 с реализацией MyFaces Trinidad 1.0.13.
Спасибо.