Jsf Primefaces 6.2选项卡视图onTabChange表单数据为空

Jsf Primefaces 6.2选项卡视图onTabChange表单数据为空,jsf,primefaces,jsf-2.2,Jsf,Primefaces,Jsf 2.2,我不确定我是否犯了一个愚蠢的错误,但在一个非常简单的情况下,这对我来说并不奏效:在我的选项卡视图/选项卡中,当我从一个选项卡切换到另一个选项卡时,我希望保存表单中输入的数据。Submit按钮在每个选项卡上都可以正常工作,但是tabchange事件显示所有我的表单数据都为空。我试过使用@all、@form、@this的过程,似乎没有任何效果。与更新选项相同 下面是XHTML: <h:form id="form"> <p:growl id="msgs" showDe

我不确定我是否犯了一个愚蠢的错误,但在一个非常简单的情况下,这对我来说并不奏效:在我的选项卡视图/选项卡中,当我从一个选项卡切换到另一个选项卡时,我希望保存表单中输入的数据。Submit按钮在每个选项卡上都可以正常工作,但是tabchange事件显示所有我的表单数据都为空。我试过使用@all、@form、@this的过程,似乎没有任何效果。与更新选项相同

下面是XHTML:

    <h:form id="form">
    <p:growl id="msgs" showDetail="true" keepAlive="5000"  />
    <p:tabView id="tView" dynamic="true" cache="false" >
        <p:ajax event="tabChange" listener="#{deleteMe.onTabChange}" update=":form:msgs" />
        <p:tab title="MyTitle I" id="tab1">
            <p:fieldset legend="Personal Information" toggleable="false" >
                <h:panelGrid columns="2" cellpadding="10"> 
                    Value 1: <p:inputText value="#{deleteMe.thingOne}"></p:inputText>
                    Value 2: <p:inputText value="#{deleteMe.thingTwo}"></p:inputText>
                    <p:commandButton value="Submit" id="ajax" update=":form:msgs" action="#{deleteMe.onSubmit}" />
                </h:panelGrid>
            </p:fieldset>
        </p:tab>
        <p:tab title="MyTitle II" id="tab2">
            <p:fieldset legend="Social Information" toggleable="false">
                <h:panelGrid columns="2" cellpadding="10">
                    <p:inputText value="#{deleteMe.thingThree}"></p:inputText>
                    <p:commandButton value="Submit" id="ajax2" update=":form:msgs" action="#{deleteMe.onSubmit}" />
                </h:panelGrid>
          </p:fieldset>  
        </p:tab>
    </p:tabView>
</h:form>   
`

在tabchange事件上,它会触发该方法,但值都为null

SystemOut     O This is thing 1 value: null
SystemOut     O This is thing 2 value: null
SystemOut     O This is thing 2 value: null

如果我犯了一些愚蠢的错误,你能指出吗?谢谢。

看到了它的解决方法,但我不确定它为什么会这样工作:

我不得不在tabView上添加带有tabchange监听器的远程命令

<p:remoteCommand name="onTabChangeProcess" process="tView, @this"/> 
    <p:tabView activeIndex="#{deleteMe.activeIndex}" id="tView" onTabChange="onTabChangeProcess()">
            <p:ajax event="tabChange" listener="#{deleteMe.onTabChange}" update="tView" process="tView"/>


这使得表单按预期工作。

正确的答案是在p:ajax命令上使用skipChildren=“false”



代码中还有一个附加的流程属性。。。为什么呢?如果没有它,它就不能工作吗?我确实试着不使用process属性,这只是我添加的一个附加内容,以查看它是否能工作。实际上,我将代码改成了这个
,奇怪的是,6.2文档pdf中甚至没有列出TabView的skipChildren属性,所以直到看到打开的标签,我才有了想法。
<p:remoteCommand name="onTabChangeProcess" process="tView, @this"/> 
    <p:tabView activeIndex="#{deleteMe.activeIndex}" id="tView" onTabChange="onTabChangeProcess()">
            <p:ajax event="tabChange" listener="#{deleteMe.onTabChange}" update="tView" process="tView"/>