【问题标题】:Primefaces Wizard doesn't execute onclick method callPrimefaces 向导不执行 onclick 方法调用
【发布时间】:2016-09-17 15:50:47
【问题描述】:

我尝试构建一个用户可以逐步输入数据的表单。在尝试了 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>

在包含文件中,我有用于在选项卡之间导航的按钮。 第一个选项卡“basic_decisions.xhtml”中的下一个按钮:

<p:commandLink value="Next" onclick="#{eAkteController.callDrivingWays()}; PF('wiz').next();" />

根据 callDrivingWays()(评估第一个选项卡的数据)的结果,第二个选项卡具有不同的内容。

我的问题:

单击第一个选项卡上的下一步按钮时,不会调用方法 callDrivingWays()。相反,它在加载第一个选项卡时已经被调用。这就是为什么我总是有一个空的第二页。

我尝试在按钮内的 actionListener 或向导的 flowListener 内切换方法调用 callDrivingWays()。之后,该方法在正确的时间被调用,但是当我点击下一个按钮时,我得到一个异常,我的组件 ID 之前已经被使用过。

有人有什么建议吗?

【问题讨论】:

  • onclick 属性用于执行 javascript,而不是服务器端方法。您的浏览器开发者工具很可能有错误
  • 所以我必须将方法放回actionListener中并修复双组件id的异常?
  • 是的,确实....并提出一个新问题(这个问题实际上是一些现有问题的重复。但是没有时间找出来

标签: jsf primefaces wizard


【解决方案1】:

尝试使用 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 来根据您进入的标签执行一些更改,退出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 2017-02-21
    • 1970-01-01
    • 2020-09-02
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    相关资源
    最近更新 更多