h:selectmanycheckbox要表示30个左右,如何在xhtml内控制表示换行呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了h:selectmanycheckbox要表示30个左右,如何在xhtml内控制表示换行呢?相关的知识,希望对你有一定的参考价值。

不准备用垂直表示,想改为两行或者三行,看网上写spread或者laywidth来控制,表示尝试了没有实现

参考技术A if(document.getElementById("nianji_one").value=="" ||document.getElementById("nianji_one").value=="") ------------代码------------------ else ----------代码------------------- 追问

可以在页面布局的xhtml内实现吗?

为啥没有为 primefaces SelectManyCheckbox 调用事件侦听器?

【中文标题】为啥没有为 primefaces SelectManyCheckbox 调用事件侦听器?【英文标题】:Why event listener not being invoked for primefaces SelectManyCheckbox?为什么没有为 primefaces SelectManyCheckbox 调用事件侦听器? 【发布时间】:2017-12-24 15:01:36 【问题描述】:

单击复选框时不会调用 SelectManyCheckbox 的事件侦听器。

我的 SelectManyCheckbox 代码:

    SelectManyCheckbox smcb = new SelectManyCheckbox();

    UISelectItem item = new UISelectItem();
    item.setItemValue("ItemValue");
    item.setItemLabel("ItemLabel");

    smcb.getChildren().add(item);

我已经尝试过 AjaxBehavior:

    AjaxBehavior ajaxBeh = (AjaxBehavior) fc.getApplication().createBehavior(AjaxBehavior.BEHAVIOR_ID);
    ajaxBeh.setRender(Collections.singletonList("@this"));
    ajaxBeh.setExecute(Collections.singletonList("@this"));
    ajaxBeh.setImmediate(true);
    ajaxBeh.setTransient(true);
    ajaxBeh.addAjaxBehaviorListener(new AjaxBehaviorListener() 
        @Override
        public void processAjaxBehavior(AjaxBehaviorEvent e)
                throws AbortProcessingException 
            System.out.println("Event Triggered");
        
    );

    smcb.addClientBehavior("change",ajaxBeh);

还有ValueChangeListener:

    public class CustomValueChangeListener implements ValueChangeListener 
    @Override
    public void processValueChange(ValueChangeEvent arg0)
           throws AbortProcessingException 
        System.out.println("processValueChange");
        
    

    smcb.addValueChangeListener(new CustomValueChangeListener ());

以上两种方法都不行。

如何设置事件监听器,以便在选中或取消选中复选框时调用它?

【问题讨论】:

为什么需要用Java来做 【参考方案1】:

我认为您可以很好地尝试通过调用 valueChangeListener 从 jsf 代码运行 ajax 事件并在 Bean 端处理您的选择。

JSF Code:
<p:selectManyCheckbox id="custom" columns="1" layout="pageDirection" value="#dapBean.selection" disabled="#!dapBean.status"
                    valueChangeListener="#dapBean.checkListener">
    <f:selectItems value="#dapBean.toolOptions" var="tool" itemLabel="#tool.toolLabel" itemValue="#tool.toolLabel" />
    <f:ajax event="valueChange" update = "@form"></f:ajax>
</p:selectManyCheckbox>

这可以通过后端的 valueChangeListener 进行备份。

Java Code:
public void checkListener(ValueChangeEvent e) 
    System.out.println(e.getNewValue().toString());
    System.out.println(e.getOldValue().toString());


每次您选中或取消选中复选框时,您都可以获得选中和未选中的条目。

希望对你有帮助!

【讨论】:

感谢您的建议。我已经使用了 ValueChangeListener 以及在 jsf 中定义的 SelectManyCheckbox 的 ajax 事件侦听器,但在这种情况下(因为数据的动态性质),我必须在支持 bean 中创建 SelectManyCheckbox。是否可以为在支持 bean 中创建的 SelectManyCheckbox 使用 ValueChangeListener 和 ajax 事件?

以上是关于h:selectmanycheckbox要表示30个左右,如何在xhtml内控制表示换行呢?的主要内容,如果未能解决你的问题,请参考以下文章

设置 p:selectManyCheckbox 的每个复选框的背景颜色

为啥没有为 primefaces SelectManyCheckbox 调用事件侦听器?

2020年01月30日

jenkins中的自动构建配置

【急求】c语言 求两个时间的差值

openCV中HSV颜色表示