JSF页面上的多组selectOneRadio:如何恢复值?
我有一个jsf页面,上面有多个radiobutton组(动态生成)。我需要在一个支持bean中从中检索值,但未能这样做 业务:用户希望订阅由多组coursedays组成的课程。用户可以选择coursedays。因此,如果一个课程由例如4个课程日组成,分为3个不同的组,那么用户可以从12个课程日中选择3个模块 xhtml页面的相关部分:JSF页面上的多组selectOneRadio:如何恢复值?,jsf,selectoneradio,Jsf,Selectoneradio,我有一个jsf页面,上面有多个radiobutton组(动态生成)。我需要在一个支持bean中从中检索值,但未能这样做 业务:用户希望订阅由多组coursedays组成的课程。用户可以选择coursedays。因此,如果一个课程由例如4个课程日组成,分为3个不同的组,那么用户可以从12个课程日中选择3个模块 xhtml页面的相关部分: <c:forEach var="cd1" items="#{coursedayBean.getCoursedays(groupBean.getFirstGr
<c:forEach var="cd1" items="#{coursedayBean.getCoursedays(groupBean.getFirstGroup}">
<h:selectOneRadio value="#{subscriptionBean.selectedCoursedays[cd1.sequenceNr]}" >
<f:selectItems value="#{coursedayBean.getCoursedaysSelectItems}"/>
</h:selectOneRadio>
</c:forEach>
不起作用。这是
c:forEach
和ui:repeat
之间的误解c:forEach
不会构建UI组件树节点
。首先,您必须引用它们之间的差异。此构造应该可以正常工作。二传手确实永远不会被召唤。JSF/EL只是通过add(index,object)
方法调用ArrayList
本身上的setter。也就是说,它基本上:
subscriptionBean.getSelectedCoursedays().add(cd1.sequenceNr, selectedItem);
我不确定你是如何观察到“它不起作用”这一具体问题的。也许您触发了一个ajax请求,并在setter方法上设置了一个断点,但没有读取服务器日志。此构造有两种可能失败的情况
new ArrayList()
准备selectedCoursedays
,则会得到PropertyNotFoundException:Target Unreachable,“selectedCoursedays”返回null
selectedCoursedays
中填写的null
项目数量与课程天数相同,则您将获得ArrayIndexOutOfBoundsException
selectedCoursedays
,如下所示:
@PostConstruct
public void init() {
selectedCoursedays = new ArrayList<String>();
for (int i = 0; i < coursedays.size(); i++) {
selectedCoursedays.add(null);
}
}
谢谢,这就是原因。这个答案不正确。这不可能是原因。“不会构建UI组件树节点”的解释仅适用于
,而
肯定会构建它们(
只呈现它们),但这绝对不是原因所在。
subscriptionBean.getSelectedCoursedays().add(cd1.sequenceNr, selectedItem);
@PostConstruct
public void init() {
selectedCoursedays = new ArrayList<String>();
for (int i = 0; i < coursedays.size(); i++) {
selectedCoursedays.add(null);
}
}
private String[] selectedCoursedays;
@PostConstruct
public void init() {
selectedCoursedays = new String[coursedays.size()];
}