我有一个带有简单 ID 作为 URL 参数的页面。我现在要做的是运行一个查询来返回一些基本上需要迭代的关联实体:我需要为 LEAGUE 游戏、CUP 游戏和 PLAYOFFS 游戏返回一个游戏时间表,因此结果列表必须根据每个迭代。
这些计划中的每一个在 GUI 中都有自己的选项卡。对于 RichFaces 选项卡,我已经需要 JSTL c:forEach,所以我“只”需要找到一种方法来对组件(这里是 Seam EntityQuery 子类实例)设置另一个 WHERE 限制。
这里的问题是:如何在迭代期间使用当前实体参数化每个查询?在 Seam/JBoss EL 中如何做到最好?如何在迭代期间对 EntityQuery 实例进行另一或两个限制?
这是我使用的 JSF 代码:
<rich:tabPanel>
<c:forEach items="#{participationListQuery.resultList}" var="pa">
<rich:tab label="#{...}" switchType="client">
<h:form>
<rich:dataTable id="schedule-scores"
value="#{rosterScheduleQuery.resultList}"
var="sgl"
width="100%"
rows="20">
...
</rich:dataTable>
</h:form>
</rich:tab>
</c:forEach>
</rich:tabPanel>
这里的问题是你不能简单地#{rosterScheduleQuery.setCustomRestriction(pa.group.round.subCompetition.competition.name)}
在 c:forEach 中调用类似的东西,因为这个表达式只会被评估一次(如果我理解正确的话)。我可能在这里遗漏了要点,因为这都是程序性的。
您通常如何解决迭代和运行时参数化查询(附加 WHERE 条件)?最佳实践总是受欢迎的。
谢谢
编辑:我已经在使用 Facelets,但是 rich:tabPanel 需要使用 JSTL c:forEach。见http://relation.to/11633.lace。