我尝试构建一个表单,用户可以逐步输入数据。在尝试FlowScoped解决方案后,我现在尝试实现Primefaces向导。
说明
我的main.xhtml:
<h:form id="antragErfassenForm">
<p:wizard showStepStatus="false" widgetVar="wiz" showNavBar="false" >
<p:tab id="basic_decision_tab" title="Grundsatzentscheidungen">
<ui:include src="/eAkte/basic_decisions.xhtml" />
</p:tab>
<p:tab id="driving_ways_tab" title="Fahrtwegvarianten">
<ui:include src="/eAkte/driving_ways.xhtml" />
</p:tab>
</p:wizard>
</h:form>
在包含文件中,我有按钮在标签之间导航。 第一个标签中的下一个按钮&#39; basic_decisions.xhtml&#39;:
<p:commandLink value="Next" onclick="#{eAkteController.callDrivingWays()}; PF('wiz').next();" />
根据callDrivingWays()(评估第一个标签的数据)的结果,第二个标签具有不同的内容。
我的问题:
单击第一个选项卡上的下一个按钮时,不会调用callDrivingWays()方法。而是在加载第一个选项卡时调用它。这就是为什么我总是有一个空的第二页。
我尝试在按钮内的actionListener或向导的flowListener中切换方法调用callDrivingWays()。之后,在正确的时间调用该方法,但是当单击下一个按钮时,我得到一个异常,我的组件ID之前已经被使用过。
有没有人有任何建议?
答案 0 :(得分:0)
尝试使用p:wizard
的flowListener属性<p:wizard flowListener="#{yourBB.yourMethod}" nextLabel="Next" backLabel="Back" showNavBar="false" widgetVar="myWizard">
在您的支持bean代码中,您可以像这样实现actionListener:
public String yourMethod(FlowEvent event) {
if(event.getOldStep().equals("driving_ways_tab")){}
if(event.getNewStep().equals("driving_ways_tab")){}
你需要getOldStep和getNewStep根据你输入的标签执行一些更改,退出。