<h:dataTable>
チェックボックス、テキスト、およびテキストボックスを含むいくつかの行を表示するためにリストを反復しているJSFページがあります。
<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
id を として、すべてのテキストボックスの id を として指定しましemailID
た。ページがレンダリングされると、ページのソースを確認すると、チェックボックスの ID が「rm:0:checkbox」、「rm:1:checkbox」... であり、テキストボックスの ID が「rm:0:」であることがわかりました。 emailID','rm: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" );
Null Pointer Exceptionは発生しませんが、どのチェックボックスの値が発生しているかはわかりません。
つまり、要約すると、
JSF は rm:1:checkbox、rm:2:checkbox などの ID を生成しますが、JSF ページでこの UI コンポーネントにアクセスしようとすると、アクセスできません。
何か不足していますか?