Does setter method return type have to be void?

2020-03-26 04:44发布

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;

  1. Does jsf need setter for modifying the object even if it's modifier is public?
  2. 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>

标签: jsf
1条回答
做自己的国王
2楼-- · 2020-03-26 05:11

Does jsf need setter for modifying the object even if it's modifier is public?

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) or getFieldName or isFieldName if your field is a boolean.

Does setter method return type have to be void for jsf modifying an object value?

Yes, the server will search void a signature containing void. Try it and see.

查看更多
登录 后发表回答