<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
,那么它不是空的,而是title
和subtitle
。我错过了什么吗?
修改
我认为我的问题可能不需要其他信息,但这里是:
.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 title
和subtitle
以及各自的getter / setter。
修改
由于BalusC指针,这个问题似乎已经解决了。
有不同的东西混淆了我的代码工作不正确。首先,我用以下方法解决问题:
@PostConstruct
public void init() {
document = new Document();
}
@PreDestroy
public void cleanup() {
document = null;
}
我在研究问题时遇到的另一个错误(以及其他一些事情造成错误的原因)是我在{{1}中未指定title
和subtitle
}:
execute