2017-07-19 58 views
0

单击复选框时不会调用SelectManyCheckbox的事件侦听器。为什么事件监听器不被调用用于Primefaces 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()); 

上述两种方法不起作用。

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

+0

为什么你需要在Java中做到这一点 – Kukeltje

回答

0

我想你可以试着通过调用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()); 

} 

每次你选中或取消选中一个复选框,你都可以得到你所选择的以及未经检查的条目。

希望它有帮助!

+0

感谢您的建议。我已经使用ValueChangeListener以及在jsf中定义的SelectManyCheckbox的ajax事件监听器,但在这种情况下(因为数据的动态特性),我必须在backing bean中创建SelectManyCheckbox。难道不可能为支持bean中创建的SelectManyCheckbox使用ValueChangeListener和ajax事件吗? – amah