JSF表单动态布局导致java.lang.IllegalStateException:找到重复ID为“j_id142”的组件

时间:2016-05-16 14:10:09

标签: jsf foreach duplicates jstl illegalargumentexception

我正在尝试为JSF中的表单构建动态布局。它应该根据来自“classifyingOptions”的值生成动态数量的选择字段,类型为:Map(Object,List(Object))。

我首先尝试使用ui:repeat来遍历地图,但是我不能因为你的EL:select和f:selectItems在构建视图时被评估并且因为它依赖于变量而无效仅由ui提供:在渲染过程中重复。(解释来源here

所以我转而使用c:forEach。

    <c:forEach items="#{action.classifyingOptions}" var="current" varStatus="i">
    <h:panelGrid columns="2">
    <u:select label="#{current.key.value}" id="select_#{i.index}" value="#{action.selectedOption}"
    readonly="#{i.index != 0 ? !action.isSelected.get(i.index -1) : false }"
    valueChangeListener="#{action.classifyingOptionChanged}" immediate="true">
    <f:selectItems value="#{current.value}" var="option" itemValue="#{option.key}" itemLabel="#{option.value}" />
    <a4j:ajax event="change" render="@form" execute="@this" />
    </u:select>
    <h:panelGroup />
    </h:panelGrid>
    </c:forEach>

我可以阅读地图并显示选择字段。要求是当选择第一个字段时,需要使用ajax调用启用下一个字段。 问题是,一旦我为第一个字段选择了一个选项,就会在服务器上抛出错误:         16.05.16 16:46:25:267 EEST] 0000006f FaceletViewDe E错误渲染视图[/pages/details.xhtml] java.lang.IllegalStateException:找到重复ID为“j_id142”的组件

在浏览器中,我收到此消息作为发生错误的响应的一部分:此页面包含以下错误:第23行第230行的错误:文档末尾的额外内容 下面是第一个错误的页面呈现。

所以我使用了ui:repeat和c:forEach,但是没有一个能够正常工作。你能检查一下我的错误吗?或者你知道任何不同的方法吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

问题已解决。我使用f:ajax而不是a4j:ajax