Доступ к динамическим компонентам UIC в управляемом компоненте JSF

У меня есть страница JSF, в которой я перебираю список в<h:dataTable> отобразить несколько строк, содержащих флажок, текст и текстовое поле.

Я должен подтвердить<h:dataTable> так что когда пользователь проверяет флажок, он должен ввести некоторый текст внутри текстового поля.

Это моя страница JSF.

 <h:form prependId="false" id="form">
    <h:dataTable id="rm" width="100%" cellspacing="4"
    value="#{controller.alertTriggers}" var="alt"
        columnClasses="c1,c2,c3,c4">                    


            <h:column>
              <h:selectBooleanCheckbox value="#{alt.checkValue}" id="checkbox"/>
           </h:column>
            <h:column>
               <h:outputText value="#{alt.id}" />                                       
            </h:column>
            <h:column>
              <h:outputFormat value="#{alt.msg1}" />                              
            </h:column>
            <h:column>                                              
                 <h:message for="emailID" id="email" styleClass="validation-error"/>
                 <h:inputText value="#{alt.mailId}" id="emailID" style="width: 87%;" />

            </h:column>                                         

    </h:dataTable>                                          
</h:form>                                       

Я дал идентификатор всех флажков какcheckbox и идентификатор всех текстовых полей какemailID, Когда страница отрисована, при проверке источника страницы я обнаружил, что идентификаторы флажков - «rm: 0: checkbox», «rm: 1: checkbox» ... и идентификаторы текстовых полей - «rm: 0: EMAILID», 'тт: 1: EMAILID' ..

В контроллере я хочу получить доступ к этим динамическим текстовым полям и флажкам, для которых я использую следующий код:

 FacesContext context = FacesContext. getCurrentInstance();


                  for (int i=0;i<9;i++){
                       UIInput u=(UIInput) FacesContext.getCurrentInstance().getViewRoot().findComponent( "form:rm:" +i+":checkbox" );
                        if ((Boolean) u.getValue()){
                              UIInput ui=(UIInput) FacesContext.getCurrentInstance().getViewRoot().findComponent( "form:rm:" +i+":emailID" );

                               //code

                       }
                 }

Но это дает java.lang.NullPointerException

Даже используя код:

  UIInput u=(UIInput) FacesContext.getCurrentInstance().getViewRoot().
   findComponent( "form:rm:0:checkbox" ); gives the same exception.

Но если я использую

     UIInput u=(UIInput) FacesContext.getCurrentInstance().getViewRoot().
       findComponent( "form:rm:checkbox" );

это не дает исключение нулевого указателя, но я не знаю, какое значение этого флажка дает.

Итак, в итоге,

JSF генерирует идентификаторы как rm: 1: checkbox, rm: 2: checkbox и т. Д., Но когда я пытаюсь получить доступ к этому компоненту пользовательского интерфейса на странице JSF, я не могу это сделать.

Я что-то пропустил ?

Ответы на вопрос(1)

Ваш ответ на вопрос