【问题标题】:Primefaces 3.0.1 TabView p:ajax tabChange Event Not firing when Validation FailsPrimefaces 3.0.1 TabView p:ajax tabChange事件在验证失败时未触发
【发布时间】:2012-01-31 07:51:46
【问题描述】:

当第一个表单 (id="form1") inputText 没有值时,我无法触发 tabChange 事件。当我在 inputText 中提供一个值时,tabChange 事件将触发。话虽如此,真正的问题是如何重组下面的内容,以便当第一个选项卡的 inputText 为空时 onChange 将触发。我的每个选项卡都有不同的形式,因为它们每个都有特定于每个选项卡的数据输入和处理。

 <html xmlns="http://www.w3c.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.org/ui">
   <h:head>
   </h:head>
   <h:body>
        <p:tabView>
            <p:ajax event="tabChange" listener="#{tabBean.onTabChange}"/>
            <p:tab title="Tab I">
                <h:form id="form1">
                    <p:inputText value="#{tabBean.inText}" required="true" requiredMessage="Required Field"/>
                    <p:commandButton value="test" actionListener="#{tabBean.submit}"/>
                </h:form>
            </p:tab>
            <p:tab title="Tab II">
                <h:form id="form2">
                    tab 2 content
                </h:form>
            </p:tab>
        </p:tabView>
    </h:body>
</html>

//Bean
public class TabBean extends BaseSessionBean{
    private String inText;

    public void onTabChange(TabChangeEvent event) {
        FacesMessage msg = new FacesMessage("Tab Changed", "Active Tab: " + event.getTab().getTitle());

        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void submit(ActionEvent actionEvent){
        System.out.println("form submitted");
    }

    public String getInText() {
        return inText;
    }

    public void setInText(String inText) {
        this.inText = inText;
    }
}

一种解决方法:(删除所需的验证)

<p:inputText value="#{adminBean.registerationLocation}">
                        <p:ajax event="blur"/>
                    </p:inputText>

【问题讨论】:

  • 我发现的唯一解决方法是删除 required="true" 并验证输入文本的模糊事件何时触发,以便在我的情况下 tabView 的 onChange 触发时不会验证 inputText表单为空,用户希望转到另一个选项卡。更新了上面的代码。

标签: primefaces


【解决方案1】:

尝试将TabChangeEvent 替换为AjaxBehaviorEvent

javax.faces.event.AjaxBehaviorEvent

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多