能否在<rich:select>中使用<h:selectManyCheckBox>?JSF RichFaces开发疑问
解决RichFaces带复选框的多选下拉列表问题
你的代码核心问题是**rich:select默认是单选组件,不能直接嵌套h:selectManyCheckbox**,这种写法不符合组件设计逻辑,所以达不到多选效果。另外多选场景下,value应该绑定集合类型(比如List<String>),而不是空字符串。
正确的实现方式是利用rich:select自带的mode="checkbox"属性启用复选框多选模式,具体代码如下:
<rich:select id="primaryFilterPayer1" value="#{payerwiseDuplicate.selectedPayers}" styleClass="cpd-combo cpd-master-filter-width" enableManualInput="false" defaultLabel="Select Payer" listWidth="300px" maxListHeight="400px" mode="checkbox"> <!-- 启用复选框多选模式 --> <f:selectItems value="#{payerwiseDuplicate.allPayer}" var="item" itemValue="#{item.key}" itemLabel="#{item.value}"/> </rich:select>
对应的后台Bean需要添加集合类型属性存储选中值,示例代码:
import java.util.List; import java.util.Map; import java.util.ArrayList; public class PayerwiseDuplicate { // 存储所有可选payer的集合 private Map<String, String> allPayer; // 存储选中的payer key集合,注意初始化避免空指针 private List<String> selectedPayers = new ArrayList<>(); // 省略getter和setter方法 public Map<String, String> getAllPayer() { return allPayer; } public void setAllPayer(Map<String, String> allPayer) { this.allPayer = allPayer; } public List<String> getSelectedPayers() { return selectedPayers; } public void setSelectedPayers(List<String> selectedPayers) { this.selectedPayers = selectedPayers; } }
关键说明:
mode="checkbox":这是让rich:select变为带复选框多选下拉的核心配置value="#{payerwiseDuplicate.selectedPayers}":绑定后台集合属性,接收用户选中的多个值enableManualInput="false":多选场景下不需要手动输入,建议关闭该属性- 后台
selectedPayers要提前初始化,避免页面交互时出现空指针异常
内容的提问来源于stack exchange,提问作者Prithu Singh Kathet
相关产品推荐
相关产品推荐

