在这种特殊情况下,您可以通过评估来获得它#{supplier}
以编程方式:
public void checkBoxListener(ValueChangeEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
Supplier supplier = context.getApplication().evaluateExpressionGet(context, "#{supplier}", Supplier.class);
// ...
}
然而,这很丑陋,您通过以下方式同步提交整个表单onchange="submit()"
。我建议为此添加一些ajax。
<h:selectBooleanCheckbox value="#{supplierAccount.supported}">
<f:ajax listener="#{bean.checkBoxListener}" render="???" />
</h:selectBooleanCheckbox>
(the render
属性由你决定)
with
public void checkBoxListener(AjaxBehavior event) {
Boolean value = (Boolean) ((UIInput) event.getComponent()).getValue();
FacesContext context = FacesContext.getCurrentInstance();
Supplier supplier = context.getApplication().evaluateExpressionGet(context, "#{supplier}", Supplier.class);
// ...
}
或者,如果您的环境支持 EL 2.2,从而在 EL 中指定方法参数:
<h:selectBooleanCheckbox value="#{supplierAccount.supported}">
<f:ajax listener="#{bean.checkBoxListener(component, supplier)}" render="???" />
</h:selectBooleanCheckbox>
public void checkBoxListener(UISelectBoolean checkbox, Supplier supplier) {
boolean selected = checkbox.isSelected();
// ...
}
也可以看看:
- 何时使用 valueChangeListener 或 f:ajax 监听器? https://stackoverflow.com/questions/11879138/when-to-use-valuechangelistener-or-fajax-listener
无关针对具体问题,使用onchange="submit()"
,了解这一点可能会有用onchange
IE6/7 中的复选框无法按预期工作。它仅在每两次点击时触发。你更想使用onclick="submit()"
反而。