Доступ к динамическим компонентам 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, я не могу это сделать.
Я что-то пропустил ?