gpt4 book ai didi

jsf-2 - 向导模式在 JSF 2.0 中使用什么范围?

转载 作者:行者123 更新时间:2023-12-04 13:42:35 25 4
gpt4 key购买 nike

我有一个多页表单,又名向导模式,其中第 1 页对应于向导表单的第 1 步,第 2 页对应于第 2 步,依此类推。除最后一页之外的每个页面上都有一个下一步按钮,可将您带到表格中的下一页。最后一个页面有一个提交按钮,用于提交向导中所有页面的所有数据。

我应该使用什么范围来维护在每个表单上输入的数据的状态?例如我应该使用 View Scoped bean 来保存所有页面上输入的所有数据吗?这是否有效,因为我将导航到不同的页面(我认为这些页面被认为是不同的“ View ”;如果它们是不同的 View ,我相信当您导航到下一页时,View Scoped 数据将丢失巫师)

最佳答案

I believe the View Scoped data will be lost when you navigate to the next page in the wizard)



没错。只要您与同一个 View 交互, View 范围就会一直存在,并且在创建新 View 时被丢弃。您正在寻找“对话范围”。任何 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";
}

// ...
}

session 由自动插入的 cid 管理请求参数。

如果您想坚持 JSF View 范围,那么最好的办法是创建一个页面,在其中有条件地呈现多个步骤:
<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>

或者,您可以使用第三方组件库,例如 PrimeFaces其中有一个 <p:wizard> 组件正是为了这个目的。

关于jsf-2 - 向导模式在 JSF 2.0 中使用什么范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9896813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com