从表单输入到对象属性的简单设置

时间:2016-07-08 15:41:56

标签: jsf

<h:inputText value="#{myController.myString}" id="stg" />
<h:inputText value="#{myController.document.title}" id="title" />
<h:inputTextarea value="#{myController.document.subtitle}" id="subtitle" />

我可以正确恢复myString,但document始终是null。它有一个默认的构造函数。如果我在Document document = new Document()中执行了myController,那么它不是空的,而是titlesubtitle。我错过了什么吗?

修改

我认为我的问题可能不需要其他信息,但这里是:

.xhtml

<h:form id="ExampleForm" styleClass="myClass">
   <h:inputText value="#{myController.myString}" id="stg" />
   <h:inputText value="#{myController.document.title}" id="title" />
   <h:inputTextarea value="#{myController.document.subtitle}" id="subtitle" />
   <h:commandButton action="#{myController.readData()}" type="submit" value="Read"/>
</h:form>

然后我完成表单中的所有输入并单击按钮...

控制器

@Named(value = "myController")
@ViewScoped
public class MyController implements Serializable {

private String myString;
private Document document;
// getters and setters

public void readData() {
    System.out.println("String: " + myString);  // prints well
    System.out.println("Doc: " + document);  // prints null
    // System.out.println("Doc title: " + document.getTitle());  // prints null when I declare private Document document = new Document();
}

}

Document是一个Serializable简单的bean,其String titlesubtitle以及各自的getter / setter。

修改

由于BalusC指针,这个问题似乎已经解决了。

有不同的东西混淆了我的代码工作不正确。首先,我用以下方法解决问题:

@PostConstruct
public void init() {
    document = new Document();
}

@PreDestroy
public void cleanup() {
    document = null;
}

我在研究问题时遇到的另一个错误(以及其他一些事情造成错误的原因)是我在{{1}中未指定titlesubtitle }:

execute

0 个答案:

没有答案