2017-05-23 12 views
1

특정 상황에서 "java.lang.IllegalStateException : 구성 요소 ID가 이미 뷰에서 발견되었습니다"예외가 발생하며 그 이유를 알 수 없습니다.java.lang.IllegalStateException : 뷰에서 구성 요소 ID가 이미 발견되었습니다.

는 I는 I은 복합체 성분 네 번 사용하고 다음 페이지를 가지며, 각각의 결과를 표시하는 데 사용되는 대응하는 출력 텍스트가 :

<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 {"cclientId} "

양식의 id를 채우는 경우에만이 오류가 발생합니다. 양식을 prependId ="false "로 설정하면 오류가 발생하지 않습니다.

아래 코드를 사용하면 오류가 발생합니다. "처리되지 않은 얼굴 오류 : 구성 요소 ID aCrazyTestForm : j_idt15가 이미보기에서 발견되었습니다". 다음 스 니펫에서는 이것이 실제로 내 사용자 지정 구성 요소의 ID임을 알 수 있습니다.

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

나는 ID로 기간에 복합 구성 요소의 구현을 포장 = "# {cc.clientId가} '가 사용 위치에 관계없이 내 구성 요소는 고유 식별자를 가져옵니다 보장 생각?

+0

생성 된 페이지 소스를 확인하십시오. 어느 것이 붕괴 되었습니까? –

+0

오류가 발생하면 생성 된 소스 페이지를 볼 수 없습니다 ... 오류 페이지의 HTML을 봅니다 –

+1

왜 처음에 생성 된 ID를 설정합니까? 사용자 정의 클래스를 사용하거나 JSF가이를 생성하도록하십시오. –

답변

1

JSF는 반복되는 요소와 혼동을 일으킬 수 있습니다. 특히 반복되는 요소가 많습니다. 각 my : jqueryautocomplete 태그에 대한 ID를 설정하고 문제가 지속되는지 확인할 수 있습니까?

+0

안녕하세요 롭, 그게 사실 나를 위해 문제를 해결! –

+0

안녕하세요. 나는 비슷한 문제가 있지만 팁 pls 줄. viewscoped를 사용할 경우 각 페이지 구성 요소에 id를 실제로 설정해야합니까? 아니면 자동으로 생성되는 id-s를 갖는 것이 좋을까요? – user390525