誰かがこの現象を説明できますか?
私はMojarra2.1.6-Glassfish3.1.2を使用しています。
内にチェックボックスがありますui:repeat
。はui:repeat
、管理対象Beanのブール値のリストをループしています。個々のチェックボックスは、そのリストの要素にバインドされています。例えば:
<ui:repeat var="checkbox" value="#{checkboxTestBean.list}" varStatus="status">
<h:selectBooleanCheckbox value="#{checkbox}"/>
</ui:repeat>
問題は、値がマネージドBeanに適用されていないことです。フォームを送信して再レンダリングすると、値が固定されません。
ただしvalue=#{checkbox}
、上記をに変更することにより、マネージドBean要素に明示的にインデックスを付けるとvalue="#{checkboxTestBean.list[status.index]}"
、すべてが機能します。
なぜそうなるのか、何か考えはありますか?
XHTML:
<h:form>
<div>
Using value="#\{var\}"
<ui:repeat var="checkbox" value="#{checkboxTestBean.list}" varStatus="status">
<h:selectBooleanCheckbox value="#{checkbox}"/>
</ui:repeat>
</div>
<div>
Using value="#\{varStatus.index\}"
<ui:repeat var="checkbox" value="#{checkboxTestBean.list}" varStatus="status">
<h:selectBooleanCheckbox value="#{checkboxTestBean.list[status.index]}"/>
</ui:repeat>
</div>
<h:commandLink actionListener="#{checkboxTestBean.actionListener}">
PROCESS FORM
<f:ajax execute="@form" render="@form"/>
</h:commandLink>
</h:form>
Java:
@ManagedBean
@ViewScoped
public class CheckboxTestBean {
public List<Boolean> list = new ArrayList<Boolean>();
public CheckboxTestBean() {
for (int i = 0; i < 5; i++) {
list.add(Boolean.FALSE);
}
}
public void actionListener(ActionEvent evt) {
System.out.println("*** dumping whole form");
System.out.println("*** list = " + list);
}
public List<Boolean> getList() {
return list;
}
public void setList(List<Boolean> list) {
this.list = list;
}
}