В данном конкретном случае вы можете получить его, оценив #{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>
(зависит от вас render
)
с
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();
// ...
}
См. также:
Не связано с конкретной проблемой, что касается использования onchange="submit()"
, может быть полезно знать, что onchange
не работает должным образом для флажков в IE6 / 7,Он срабатывает только при каждом втором клике.Вы скорее хотите использовать onclick="submit()"
вместо.