【问题标题】:Generating unique ID attributes in datatable with JSF2 and IceFaces2使用 JSF2 和 IceFaces2 在数据表中生成唯一 ID 属性
【发布时间】:2012-01-16 15:54:27
【问题描述】:

我正在尝试使用如下代码:

<ice:dataTable id="revisionDocuments" value="#{agendaBean.agenda.revisionsDocuments}" var="revision">
    <ice:column>
        <ice:inputText value="#{revision.sequenceAdresse}" id="revisionSequenceAdresse#{revision.index}" />
    </ice:column>

我想为我的表单字段设置一个不同的 ID。修订对象确实包含一个“索引”字段,表示列表中对象的索引。我想看到它出现在 id 中。然而,什么也没有发生。永远不会解释 #{revision.index} 表达式(永远不会调用修订对象上的 getIndex())。

你会告诉我 JSF 已经做出了类似的东西:

revisionDocuments:0:revisionSequenceAdresse
revisionDocuments:1:revisionSequenceAdresse
revisionDocuments:2:revisionSequenceAdresse

是的,但这只会影响 HTML 中生成的 clientId。代表表单字段的 UIComponent(在 FacesContext 的 ViewRoot 中)具有所有相同的“id”和“clientId”(是的,如果 HTML 包含“revisionDocuments:0:revisionSequenceAdresse”,则您将在 ViewRoot 中找到的“clientId”是revisionDocuments:revisionSequenceAdresse)。

有人可以帮我试试吗?

非常感谢,任何帮助将不胜感激。

【问题讨论】:

    标签: jsf-2 uniqueidentifier clientid icefaces-2


    【解决方案1】:

    组件 ID 将在视图构建时确定,而不是在视图渲染时确定。 #{revision} 在视图构建期间不可用,因此它总是评估为空。基本上,您需要将其绑定到 #{agendaBean} 或在视图构建期间已经在范围内的其他内容。组件 ID 特定于组件本身,而不是其生成的 HTML 输出。您不能将多个不同的 ID 分配给物理上的同一个组件。

    但是您实际上不需要摆弄这种方法。您认为这是解决方案的具体问题已在您之前的问题中得到解答:JSF2 + IceFaces 2 - Retrieve UIComponent from ViewRoot

    【讨论】:

    • 有点困惑,因为我在 JSF1.2 和 IceFaces 1.8.2 上的另一个项目中做了一些非常接近此代码的事情。案例必须略有不同(从生命周期的角度来看)。当我在这个项目上从 1.8.2 迁移到 2.0.2 时,我会看看它是否有效。感谢您对生命周期的回答和精确度。你帮了大忙!
    • 如果 EL 表达式的值在视图构建期间可用,则有可能。您的具体问题是您在 id 属性中试图评估一个 EL 表达式,其值仅在视图渲染期间可用。试试id="foo#{agendaBean.someId}" 之类的东西,你会发现它被正确评估了。但是,对于一个很大的 BUT,这将导致所有生成的 HTML 元素在视图渲染期间具有相同的 ID 后缀值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 2011-06-14
    • 2018-10-20
    相关资源
    最近更新 更多