JSF 2.2にアップグレードできる場合は、すぐにアップグレードしてください。CDIのネイティブ@ViewScoped
アノテーションを提供します。
import javax.faces.view.ViewScoped;
import javax.inject.Named;
@Named
@ViewScoped
public class Bean implements Serializable {
// ...
}
または、 OmniFacesをインストールして、動作するもの(JSFで壊れている)@ViewScoped
を含む独自のCDI互換性をもたらします。@PreDestroy
@ViewScoped
import javax.inject.Named;
import org.omnifaces.cdi.ViewScoped;
@Named
@ViewScoped
public class Bean implements Serializable {
// ...
}
もう1つの方法は、JSF 2.0/2.1をCDIに透過的にブリッジするMyFacesCODIをインストールすることです。@ViewScoped
これは、自動生成されたリクエストパラメータをURLに追加するだけです(@ConversationScoped
そうするように)。
import javax.faces.bean.ViewScoped;
import javax.inject.Named;
@Named
@ViewScoped
public class Bean implements Serializable {
// ...
}
本当に使用する必要がある場合は@ConversationScoped
、実際に手動で開始および終了する必要があります。会話の最後のステップで、を呼び出して呼び出す必要があります。通常は、新しいビューにリダイレクトする@Inject
アクションメソッドConversation
です。begin()
@PostConstruct
end()
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
@Named
@ConversationScoped
public class Bean implements Serializable {
@Inject
private Conversation conversation;
// ...
@PostConstruct
public void init() {
conversation.begin();
}
public String submit() {
// ...
conversation.end();
return "some.xhtml?faces-redirect=true";
}
}
参照: