JSF 1.2中的PropertyNotWritableException - setter返回值

时间:2014-01-31 19:07:52

标签: el jsf-1.2 override

我在使用EL 1.0的JSF 1.2中遇到了一些属性绑定问题

public class Bean {

  private String name;

  public String getName() {
     return name;
  }

  public Bean setName(String name)
     this.name = name;
     return this;
  }

XHTML在表单提交时给出了“属性'名称'不可写”错误:

.. 

<h:inputText value="#{bean.name}" />

..

为什么呢?它是第三方库,有解决这种情况的解决方法吗?

2 个答案:

答案 0 :(得分:0)

更改setName方法的签名

public void setName(String name)
  this.name = name;
}

如果你想在你的Bean类中使用第二个构造函数,那么它应该像这样设计

public Bean (String name)
  this.name = name;
}

答案 1 :(得分:0)

我找到了针对该案例的解决方法,但显然这不是最优雅的方式:

创建Bean类的“伪扩展”:

  public class BeanExtension {

  private Bean instance = new Bean();

  public String getName() {
    return instance.getName();
  }

  public void setName(String name)
    instance.setName(name);
  }

  // omitted instance getter and setter methods

  }

由于我想覆盖setName方法返回“void”,现在我必须使用bean.instance来访问它的属性,并bean.name将JSF上的名称绑定到EL。