【问题标题】:Skip to next <p:wizard> tab without validation不经验证跳到下一个 <p:wizard> 选项卡
【发布时间】:2013-01-08 01:43:09
【问题描述】:

我正在使用带有多个标签的&lt;p:wizard&gt;。一些选项卡包含需要验证的输入,例如信用卡号。但是可以跳过整个选项卡。如何跳到下一个标签?

我正在考虑 2 个实现,但我不确定如何:

  1. 添加一个跳过按钮,无需验证当前选项卡即可转到下一个选项卡。

    <p:commandButton process="@this" immediate="true" onclick="wiz.next();" value="#{msgs['action.skip']}"></p:commandButton>
    

向导。

<p:wizard widgetVar="wiz" flowListener="#{accountActivationController.onFlowProcess}" nextLabel="#{msgs['action.next']}" backLabel="#{msgs['action.back']}">
    <p:tab id="tabProfile">     
            //...
    </p:tab>
    <p:tab id="tabAddress">     
        <p:panel>
            <p:inputText id="shippingZipCode_OTHERS" value="#{accountActivationController.shippingAddress.postCode}">
            </p:inputText>
            <p:message for="shippingZipCode_OTHERS" />      
            <p:messages id="globalAddress" showDetail="true">
            </p:messages>
            <f:facet name="footer">
                <div class="buttons-set">
                    <p:commandButton process="@this" value="#{msgs['action.skip']}" oncomplete="wiz.next();">
                    </p:commandButton>
                </div>
            </f:facet>
        </p:panel>
    </p:tab>
    <p:tab id="tabSchool">  
            //....  
            <p:commandButton action="#{bean.submit} value="Submit" />
    </p:tab>
</p:wizard>

似乎process 在这部分不起作用。 onclick, oncomplete on p:commandButton 不会改变任何东西。

目标是当按下跳过按钮时,不应该触发表单验证,但我仍在尝试弄清楚如何做到这一点。

  1. 添加一个“跳过”复选框,这将禁用该特定选项卡上的验证。

【问题讨论】:

  • 第一通常是要走的路。因此,为该代码添加更多上下文,让我们看看它为什么会失败
  • 我已经对此进行了广泛的测试,似乎 PF 向导不支持选择性处理组件,这可以解释为什么他们没有在演示中使用它,而是使用“跳过”选择解决方法

标签: validation jsf jsf-2 primefaces wizard


【解决方案1】:

经过几个小时的测试,我已经验证了 kolossus 所说的是真的。 primefaces 向导不支持选择性处理组件,它始终验证特定选项卡上的所有字段。

就我而言,我只检查必填字段,所以我所做的是删除所有必填字段验证器,因此当我单击“跳过”按钮时,它应该导航到下一个选项卡。当我单击下一步按钮时,在 onFlowListener 事件中手动验证所有必填字段。

类似这样的:

public String onFlowProcess(FlowEvent event) {
    if (event.getOldStep().equals("tabAddress")) {
        if (skipToNext) {
            skipToNext = false; 
            return event.getNewStep();
        }
        if (StringUtils.isBlank(shippingAddress.getCountryCode())
                || StringUtils.isBlank(shippingAddress.getPostCode())
                || StringUtils.isBlank(shippingAddress.getState())
                || StringUtils.isBlank(shippingAddress.getAddress1())) {            
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, null, "ERROR Address")));
            return event.getOldStep();
        }       
    }
}

【讨论】:

    【解决方案2】:

    客户端 API:

    移动到“n”标签

    onclick="PF('wiz').loadStep (PF('wiz').cfg.steps [n], true);  "
    

    从 0 到 m 和 n > o 和 n

    【讨论】:

    • 请添加一些解释,避免代码只回答
    猜你喜欢
    • 1970-01-01
    • 2015-09-18
    • 2011-09-13
    • 2011-08-04
    • 2015-10-08
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多