【问题标题】:Iterating over a list in JSF 1.2遍历 JSF 1.2 中的列表
【发布时间】:2012-09-23 16:28:41
【问题描述】:

有没有任何方法可以在不使用任何第三方组件的情况下迭代 JSF 1.2 中的列表?我知道我可以使用 Tomahawk 做到这一点。我也知道可以使用 JSTL 来完成,但我将其作为最后的手段。我也不能使用<ui:repeat>,因为我们使用的是 JSF 1.2。有没有像<ui:repeat> 这样优雅的方式在 jsf 1.2 中做到这一点?

【问题讨论】:

    标签: jsf jsf-1.2


    【解决方案1】:

    唯一可以迭代ListJSF 1.2 component<h:dataTable>

    在 JSP 中,唯一可以迭代 List 的其他“标准”(即不是“第 3 方”)标签是 JSTL <c:forEach>。如果您想要迭代的List 在视图构建期间已经可用,那么使用JSTL 应该不会造成太大的伤害。只有当它仅在视图渲染期间可用时,您才会遇到麻烦,例如因为它嵌套在 <h:dataTable> 中并且应该迭代表的 var 的属性。由于JSTL in JSF2 Facelets... makes sense?中提到的原因,这只是行不通

    如果不使用第三方库(例如 Tomahawk 的 <t:dataList>),则没有其他方法,除非您愿意通过自己创建自定义 UIComponent 来重新发明轮子。然而,这不是一项微不足道的工作。

    但是,可以将 Facelets 1.x 集成到 JSF 1.2 中。 Facelets 1.x docbook 中描述了指南。如果您已经有一个使用 JSP 作为视图技术的现有 JSF 应用程序,那么这只会是相当多的工作;您需要将 JSP 转换为 Facelets。但它最终将使 JSF 2.x 的升级路径变得更加容易。另见 a.o. Migrating from JSF 1.2 to JSF 2.0Why Facelets is preferred over JSP as the view definition language from JSF2.0 onwards?

    【讨论】:

    • 感谢您提供这条令人沮丧的信息...为什么哦,为什么我被困在 JSF 1.2 中!!?!
    • @Jah:只需集成 Tomahawk 并使用 <t:dataList>。任何说您不得使用诸如 Tomahawk 之类的第三方组件库的业务限制都是愚蠢的。
    • @BalusC,我试过像 ' #{abc} ' 那样做,但它不起作用。
    • @nvy:您需要<h:column> 来指定表格列。此外,与 Facelets 不同,您不能在 JSP 的模板文本中使用延迟 EL,因此您应该真正使用 <h:outputText> 来代替 #{abc}。所以,总而言之,这应该是:<h:datatable value="#{bean.list}" var="abc"><h:column><h:outputText value="#{abc}"/></h:column></h:datatable>。另请参阅 Java EE 5 教程:docs.oracle.com/javaee/5/tutorial/doc/bnarf.html#bnarz
    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2022-01-04
    • 2016-08-27
    • 2011-09-14
    • 2022-11-22
    • 1970-01-01
    • 2010-12-18
    • 2022-01-07
    相关资源
    最近更新 更多