Jsf 2 使用JSF2和IceFaces2在datatable中生成唯一的ID属性
我正在尝试使用如下代码:Jsf 2 使用JSF2和IceFaces2在datatable中生成唯一的ID属性,jsf-2,uniqueidentifier,clientid,icefaces-2,Jsf 2,Uniqueidentifier,Clientid,Icefaces 2,我正在尝试使用如下代码: <ice:dataTable id="revisionDocuments" value="#{agendaBean.agenda.revisionsDocuments}" var="revision"> <ice:column> <ice:inputText value="#{revision.sequenceAdresse}" id="revisionSequenceAdresse#{revision.index}
<ice:dataTable id="revisionDocuments" value="#{agendaBean.agenda.revisionsDocuments}" var="revision">
<ice:column>
<ice:inputText value="#{revision.sequenceAdresse}" id="revisionSequenceAdresse#{revision.index}" />
</ice:column>
revisionDocuments:0:revisionSequenceAdresse
revisionDocuments:1:revisionSequenceAdresse
revisionDocuments:2:revisionSequenceAdresse
是,但这只影响HTML中生成的clientId。表示来自FacesContext的ViewRoot中表单字段的UIComponent具有所有相同的id和clientId yes,如果HTML包含revisionDocuments:0:revisionSequenceAdresse,则在ViewRoot中找到的clientId是revisionDocuments:revisionSequenceAdresse
有人能帮我吗
非常感谢您,我们将非常感谢您的帮助。组件ID将在视图构建期间确定,而不是在视图渲染期间确定。{revision}在视图生成期间不可用,因此其计算结果始终为空。基本上,您需要将其绑定到{agendaBean}或在视图构建期间已经在范围内的其他内容。组件ID特定于组件本身,而不是其生成的HTML输出。不能为同一个组件分配多个不同的ID
但实际上,你不需要在这种方法上瞎折腾。您认为这就是解决方案的具体问题已经在前面的问题中得到了回答:。有点让人困惑,因为我在JSF1.2和IceFaces 1.8.2上的另一个项目中做了一些非常接近这段代码的事情。从生命周期的角度来看,情况必须稍有不同。当我在这个项目上从1.8.2迁移到2.0.2时,我将看看它是否有效。感谢您对生命周期的回答和精确性。你帮了大忙!如果EL表达式的值在视图生成期间可用,则有可能。具体的问题是,您在id属性中尝试计算EL表达式,该表达式的值仅在视图渲染时可用。尝试像id=foo{agendaBean.someId}这样的方法,您将看到它的计算结果是正确的。但是,如果使用大But,则在视图渲染期间,所有生成的HTML元素都将具有相同的ID后缀值。