java.lang.IllegalStateException:在视图中已找到组件ID

时间:2017-05-23 12:17:12

标签: java jsf composite-component

我收到" java.lang.IllegalStateException:在视图中找到了组件ID"在某些情况下的例外,我不明白为什么。

我有以下页面,我使用复合组件四次,并且有一个相应的输出文本用于显示每个组件的结果:

<h:form id="aCrazyTestForm"">

   <my:jqueryautocomplete values="#{jqueryAutoCompleteBean.carListJson}" selectedValue="#{jqueryAutoCompleteBean.selectedCarOne}" field="make">
                <f:ajax execute=":aCrazyTestForm:completeOne" render=":aCrazyTestForm:completeOne" event="tagSelectedEvent" listener="#{jqueryAutoCompleteBean.selectedCarOne}" />
            </my:jqueryautocomplete>

            <h:outputText id="completeOne" value="#{jqueryAutoCompleteBean.selectedCarOne}" />

            <my:jqueryautocomplete values="#{jqueryAutoCompleteBean.carListJson}" selectedValue="#{jqueryAutoCompleteBean.selectedCarTwo}" field="make">
                <f:ajax execute=":aCrazyTestForm:completeTwo" render=":aCrazyTestForm:completeTwo" event="tagSelectedEvent" listener="#{jqueryAutoCompleteBean.selectedCarTwo}" />
            </my:jqueryautocomplete>

            <h:outputText id="completeTwo" value="#{jqueryAutoCompleteBean.selectedCarTwo}" />

            <my:jqueryautocomplete values="#{jqueryAutoCompleteBean.carListJson}" selectedValue="#{jqueryAutoCompleteBean.selectedCarThree}" field="make">
                <f:ajax  execute=":aCrazyTestForm:completeThree" render=":aCrazyTestForm:completeThree" event="tagSelectedEvent" listener="#{jqueryAutoCompleteBean.selectedCarThree}" />
            </my:jqueryautocomplete>

            <h:outputText id="completeThree" value="#{jqueryAutoCompleteBean.selectedCarThree}" />

            <my:jqueryautocomplete values="#{jqueryAutoCompleteBean.carListJson}" selectedValue="#{jqueryAutoCompleteBean.selectedCarFour}" field="make">
                <f:ajax  execute=":aCrazyTestForm:completeFour" render=":aCrazyTestForm:completeFour" event="tagSelectedEvent" listener="#{jqueryAutoCompleteBean.selectedCarFour}" />
            </my:jqueryautocomplete>

            <h:outputText id="completeFour" value="#{jqueryAutoCompleteBean.selectedCarFour}" />

</h:form>

我的复合组件实现包含在一个带有id =&#34;#{cc.clientId}&#34;

的范围内

如果我填写表单的id,我只会遇到此错误。如果我将表单设置为prependId =&#34; false&#34;,那么我就不会收到错误。

使用以下代码我收到错误: &#34; Unhandled Faces错误:组件ID aCrazyTestForm:j_idt15已在视图中找到&#34;。在下面的代码片段中,您可以看到这实际上是我的自定义组件的ID。

<JqueryAutoComplete id="j_idt15" immediate="false" inView="true" localValueSet="false" rendered="true" required="false" transient="false" valid="true">

我认为将复合组件的实现包装在一个带有id =&#34;#{cc.clientId}&#34;的范围内。确保我的组件在任何地方都可以获得唯一标识符?

1 个答案:

答案 0 :(得分:1)

JSF有时会与重复元素混淆,尤其是重复的元素。您可以尝试为每个 my:jqueryautocomplete 标记设置ID,看看问题是否仍然存在?