我们有一个基于JSF2的Web应用程序,它为购买流程建模,用户在类似向导的庄园中输入和选择不同的信息,可以向前和向后导航,并在某些时候完成流程。
所以没什么特别的,应用程序和用户之间的典型对话。为此我尝试了常规和MyFaces会话范围,但我知道如何开始和结束对话。我仍然无法确保进行有效的对话,换句话说,如何通过键入页面URL而不是将用户重定向到第1步来避免用户在中间进入流程?
答案 0 :(得分:0)
你无法避免这种情况。最终用户可以完全自由地操纵请求URL。您最好的选择是坚持单个视图/ URL,其中向导步骤是基于视图状态有条件地(ajax-)呈现的。这样,最终用户只能通过UI中提供的按钮进行导航,而不能通过操作URL进行导航。
E.g。
<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>
此外,通过这种方式,您可以使用单个@ViewScoped
bean而不是@ConversationScoped
bean(使用MyFaces CODI,您可以在CDI上使用JSF @ViewScoped
{{ 1}},对于重要的情况而言。)
此外,PrimeFaces有一个<p:wizard>
组件,几乎完全相同。您可能会发现它有助于避免一些痛苦的样板代码以及验证等。