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()@PostConstructend()
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";
}
}
参照: