我将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更改为 公众但仍然得到同样的错误。所以我有两个问题;
这是我的对象类
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>
答案 0 :(得分:5)
jsf是否需要setter来修改对象,即使它的修饰符是 公共?
简短回答:是的。
按照惯例,Bean的每个字段都应该是私有的,并且可以通过相应的getter和setter进行访问/变更。
将字段更改为公开不会改变任何内容,因为当您在EL代码中键入字段名称时,服务器将搜索setFieldName(param)
或getFieldName
或isFieldName
如果你的字段是布尔值。
对于jsf修改,setter方法的返回类型是否必须为void 对象价值?
是的,服务器将搜索包含void
的签名。试试吧,看看。