Primefaces向导不会执行onclick方法调用

时间:2016-05-20 11:35:26

标签: jsf primefaces wizard

我尝试构建一个表单,用户可以逐步输入数据。在尝试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之前已经被使用过。

有没有人有任何建议?

1 个答案:

答案 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根据你输入的标签执行一些更改,退出。