Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bind h:selectBooleanCheckbox value to int/Integer instead of boolean/Boolean

I have a <h:selectBooleanCheckbox value="#{someBean.prop}"> where prop is a property of type int. Is it really not working straight away? Do I have to implement a custom converter to convert Boolean to int? Does anyone happen to have converter code for that at stock? I read that there is some bug in JSF 2.0 that prevents converters for <h:selectBooleanCheckbox> to be processed. Can anyone confirm that?

I use MyFaces 2, Tomahawk and Tomcat 6.

like image 704
geeehhdaa Avatar asked Apr 18 '11 17:04

geeehhdaa


2 Answers

The <h:selectBooleanCheckbox> should, as its name say, be bound to a boolean or Boolean property. Nothing else. That it allows a converter attribute is actually a bug in the spec. It should never have allowed it.

The problem is more in your model, why would you use an int to represent a boolean state? Change your model to let it be a fullworthy boolean.

If changing the model isn't an option for some reason (a 3rd party API, a stupid architect, or stupid business restrictions, etc), then wrap the model getter/setter in the backing bean like follows

public boolean isChecked() {
    return someModel.getSomeInt() != 0;
}

public void setChecked(boolean checked) {
    someModel.setSomeInt(checked ? 1 : 0);
}

and use it instead as <h:selectBooleanCheckbox value="#{bean.checked}" />.

like image 50
BalusC Avatar answered Jan 02 '23 20:01

BalusC


just to say MySQL doesn't have boolean as field type choice, and it could be an example for this need.

like image 20
Eduardo Avatar answered Jan 02 '23 19:01

Eduardo