Primefaces 8及以上SelectOneRadio.java废弃selectItems字段替代方案咨询
Primefaces 10 SelectOneRadio selectItems废弃API替代方案
变更说明
Primefaces自8.0版本起正式移除SelectOneRadio类中原有的selectItems成员变量,以及对应的getSelectItems()、setSelectItems()方法,相关功能通过子组件绑定逻辑实现,适配方案分两种场景:
场景1:Facelet页面适配
旧版本(Primefaces7及以下)写法
直接在p:selectOneRadio标签上声明selectItems属性绑定选项集合:
<p:selectOneRadio value="#{testBean.selectedOption}" selectItems="#{testBean.optionList}" />
新版本适配写法
新增p:selectItems子节点绑定选项集合即可:
<p:selectOneRadio value="#{testBean.selectedOption}"> <p:selectItems value="#{testBean.optionList}" var="opt" itemLabel="#{opt.label}" itemValue="#{opt.value}" /> </p:selectOneRadio>
场景2:后端Java代码动态生成组件适配
旧版本(Primefaces7及以下)写法
直接调用setSelectItems方法注入选项集合:
SelectOneRadio radio = new SelectOneRadio(); radio.setSelectItems(optionList);
新版本适配写法
手动创建SelectItems实例,添加为SelectOneRadio的子组件:
import org.primefaces.component.selectoneradio.SelectOneRadio; import org.primefaces.component.selectitems.SelectItems; import javax.faces.component.UIComponent; // 初始化单选组件 SelectOneRadio radio = new SelectOneRadio(); // 构建选项绑定组件 SelectItems selectItems = new SelectItems(); selectItems.setValue(optionList); // 传入你的选项集合 // 绑定为子组件 radio.getChildren().add(selectItems);
若需要读取组件已绑定的选项集合,可通过遍历子组件实现:
public List<SelectItem> getRadioSelectItems(SelectOneRadio radio) { for (UIComponent child : radio.getChildren()) { if (child instanceof SelectItems) { return (List<SelectItem>) ((SelectItems) child).getValue(); } } return Collections.emptyList(); }
内容的提问来源于stack exchange,提问作者Pancham Goyal
相关产品推荐
相关产品推荐

