@ViewScoped
ユーザーが同じページにいるときにBeanが再構築されないようにする必要があると思っていました...では@ViewScoped
、アクションハンドラーによってブラウザーがそのビューから移動する前に、JSfコントローラーBeanが複数回作成されるのはなぜですか?
誰かが私をここで正しい方向に向けることができますか?
これが私のコードです:
ビュー(domain / edit.xhtml)
<h:form prependId="false">
<h:inputText id="descriptionField" value="#{domainEdit.domain.description}" />
<h:commandButton id="saveButton" value="save" action="#{domainEdit.save}" />
</h:form>
ViewScopedコントローラー(DomainEdit.java)
@Named("domainEdit")
@ViewScoped
public class DomainEdit implements Serializable {
private static final long serialVersionUID = 1L;
protected DomainEdit() {
}
@PostConstruct
protected void init() {
System.out.println("post construct called.");
}
@PreDestroy
public void destroy() {
System.out.println("pre destroy called.");
}
public DomainEntity getDomain() {
System.out.println("displaying domain...");
// some code to return the domain
return domain;
}
public String save() {
System.out.println("saving...");
// some saving code
return "view";
}
}
出力
これをデプロイして次のように実行すると、次の出力が得られます。
編集ビュー(edit.xhtml)に移動します
post construct called. displaying domain... pre destroy called.
domainDescriptionField入力テキストの内容を変更します
何も記録されません
[保存]をクリックします
post construct called. displaying domain... pre destroy called. post construct called. displaying domain... pre destroy called. post construct called. displaying domain... pre destroy called. post construct called. displaying domain... pre destroy called. post construct called. displaying domain... saving domain... pre destroy called.