I change setter method return type to an object for ease eg: obj.setValue(newVal).setName(newName).setId(newId);
but after this change tomcat gives
javax.el.PropertyNotFoundException:
/WEB-INF/flows/materialorder/newOrder.xhtml @99,182
value="#{materailOrdService.mofEntity.nmExplanation.value}":
Property 'value' not writable on type tr.com.hydron.softexpert.order.model.MainFormEntity$MofField
To get rid of this exception I changed modifier from private to public but still getting the same error. So I have two questions;
- Does jsf need setter for modifying the object even if it's modifier is public?
- Does setter method return type have to be void for jsf modifying an object value?
Here is my object class
public static class MofField implements Serializable{
private static final long serialVersionUID = 1L;
public Object value;
...
public Object getValue() {
return value;
}
public MofField setValue(Object value) {
this.value = value;
return this;
}
...
}
edit: here is my xhtml code:
<p:inputTextarea valueChangeListener="#{materailOrdService.onExplanationChange}" value="#{materailOrdService.mofEntity.nmExplanation.value}" rows="3" cols="38" >
<p:ajax event="valueChange" global="false" immediate="true" partialSubmit="true" process="@this" />
</p:inputTextarea>
Short answer : Yes.
By convention, each field of a Bean should be private and be accessed/mutated by there respective getters and setters.
Changing the field to public won't change anything, as when you type in the field name in your EL code, the server will search for the
setFieldName(param)
orgetFieldName
orisFieldName
if your field is a boolean.Yes, the server will search void a signature containing
void
. Try it and see.