You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:15:03