1

我们有一个基于 JSF2 的 Web 应用程序,它对购买过程进行建模,用户在类似向导的庄园中输入和选择不同的信息,可以向前和向后导航,并在某个时间点完成该过程。

所以没什么特别的,应用程序和用户之间的典型对话。为此,我尝试了常规和 MyFaces 对话范围,但我知道如何开始和结束对话。我仍然无法确保进行积极的对话,所以换句话说,我如何避免用户通过键入页面 URL 进入中间过程,而不是将他重定向到第 1 步?

4

1 回答 1

0

你无法避免这一点。最终用户可以完全自由地操作请求 URL。您最好的选择是坚持使用单个视图/URL,其中向导步骤根据视图的状态有条件地(ajax-)呈现。这样,最终用户只能通过 UI 中提供的按钮进行导航,而不能通过操作 URL。

例如

<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>

此外,通过这种方式,您可以使用单个@ViewScopedbean 而不是@ConversationScoped一个(对于重要的情况,使用 MyFaces CODI 您可以@ViewScoped在 CDI 上使用 JSF @Named)。

此外,PrimeFaces有一个<p:wizard>几乎完全一样的组件。您可能会发现它很有用,可以让您免于验证等一些痛苦的样板代码。

于 2013-01-10T14:13:00.500 回答