我正在尝试为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,但是没有一个能够正常工作。你能检查一下我的错误吗?或者你知道任何不同的方法吗? 谢谢!
答案 0 :(得分:0)
问题已解决。我使用f:ajax而不是a4j:ajax