당신이 마법사의 다음 페이지로 이동하면보기 범위가 지정된 데이터가 손실 될 것으로 예상) 맞습니다
. 뷰 범위는 동일한 뷰와 상호 작용하고 새로운 뷰가 생성 될 때마다 휴지통에있는 한 계속 유지됩니다. 당신은 "대화 범위"를 찾고 있습니다. 이것은 JSF 관리 빈 범위에서 사용할 수 없습니다. 그러나 이것은 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
요청 매개 변수에 의해 관리됩니다. 당신이 제 3 자를 사용할 수,
<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>
을 또는 :
는 JSF 뷰 범위에 충실하고 싶은 경우는, 당신의 가장 좋은 방법은 당신이 조건부로 여러 단계를 렌더링에있어서 하나의 페이지를 만드는 것입니다 이 목적을 위해 <p:wizard>
구성 요소를 가진 PrimeFaces과 같은 구성 요소 라이브러리가 필요합니다.
내가 ViewScope는 아약스와 올바르게 작동하는지 생각합니다. 하지만이 옵션을 권하고 싶습니다. – Gaim