setter方法的返回类型是否必须为void?

时间:2015-04-21 20:12:59

标签: jsf

我将setter方法返回类型更改为对象,以便轻松例如:obj.setValue(newVal).setName(newName).setId(newId);

但是在这个改变之后tomcat给出了

  

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

为了摆脱这个异常我将修饰符从private更改为     公众但仍然得到同样的错误。所以我有两个问题;

  1. jsf是否需要setter来修改对象,即使它是修饰符 是公开的?
  2. 对于jsf,setter方法返回类型是否必须为void 修改对象值?
  3. 这是我的对象类

    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;
        }       
        ...     
    }
    

    修改 这是我的xhtml代码:

    <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>
    

1 个答案:

答案 0 :(得分:5)

  

jsf是否需要setter来修改对象,即使它的修饰符是   公共?

简短回答:是的。

按照惯例,Bean的每个字段都应该是私有的,并且可以通过相应的getter和setter进行访问/变更。

将字段更改为公开不会改变任何内容,因为当您在EL代码中键入字段名称时,服务器将搜索setFieldName(param)getFieldNameisFieldName如果你的字段是布尔值。

  

对于jsf修改,setter方法的返回类型是否必须为void   对象价值?

是的,服务器将搜索包含void的签名。试试吧,看看。