私は、ウィザードの次のページに移動したときに表示スコープのデータが失われると信じて)
。ビューの有効範囲は、同じビューとやりとりしている限り、新しいビューが作成されるたびに破棄されます。あなたは "会話範囲"を探しています。これは、JSFマネージドBeanスコープでは使用できません。しかし、これはCDI @ConversationScoped
によって利用可能です。ご使用の環境でCDIをサポートするために起こるのであれば、あなたはそれを利用することができます
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
@Named
@ConversationScoped
public class Wizard implements Serializable {
@Inject
private Conversation conversation;
@PostConstruct
public void init() {
conversation.begin();
}
public void submitFirstStep() {
// ...
}
// ...
public String submitLastStep() {
// ...
conversation.end();
return "someOtherPage?faces-redirect=true";
}
// ...
}
会話が自動的に挿入さcid
リクエストパラメータによって管理されています。
あなたはJSFビューのスコープに固執したい場合は、あなたの最善の策は、あなたが条件付きで複数のステップをレンダリングする前記単一のページを作成することです:
<h:panelGroup rendered="#{wizard.step == 1}">
<ui:include src="/WEB-INF/wizard/step1.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{wizard.step == 2}">
<ui:include src="/WEB-INF/wizard/step2.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{wizard.step == 3}">
<ui:include src="/WEB-INF/wizard/step3.xhtml" />
</h:panelGroup>
または、サードパーティ製を使用することができます正確にこの目的のために<p:wizard>
成分を有するPrimeFacesのようなコンポーネントライブラリである。
私はViewScopeだけアヤックスで正しく動作することを考えます。しかし、私はこのオプションをお勧めします。 – Gaim