如何在jsf中使用Ajax或不使用Ajax提交两个表单

如何在jsf中使用Ajax或不使用Ajax提交两个表单,ajax,jsf,primefaces,submit,Ajax,Jsf,Primefaces,Submit,我基本上有两个问题 当我按下Form1中的按钮时,它工作正常,但我看不到来自FacesContext的消息。 另一个问题在表2中。当我只按一次按钮时,它就会进入服务器,但什么也没发生,没有提交。但当我第二次按下它时,它工作正常。当然,在表格一中也有同样的问题,我看不到来自FacesContext的消息。请您帮助并告诉我是什么原因导致了这种情况,或者是否有另一种解决方案可以在一个页面中包含多个表单 <p:tabView>

我基本上有两个问题

当我按下Form1中的按钮时,它工作正常,但我看不到来自FacesContext的消息。 另一个问题在表2中。当我只按一次按钮时,它就会进入服务器,但什么也没发生,没有提交。但当我第二次按下它时,它工作正常。当然,在表格一中也有同样的问题,我看不到来自FacesContext的消息。请您帮助并告诉我是什么原因导致了这种情况,或者是否有另一种解决方案可以在一个页面中包含多个表单

                    <p:tabView>
                        <p:tab title="Form1">
                            <h:form id="form1">
                                <p:inputText id="txtInput" value="#{controller.selected.defaultLayout}" />
                                <h:commandButton value="Submit other form" action="#{controller.createMenu()}">
                                    <f:ajax execute="@form" render="@form" />
                                </h:commandButton>

                            </h:form>
                        </p:tab>
                        <p:tab title="Form2">
                            <h:form id="form2">
                                <p:inputText id="txtInput2" value="#{controller.selected.defaultTheme}" />
                                <h:commandButton value="Submit other form" action="#{controller.createMenu2()}">
                                    <f:ajax execute="@form" render="@form" />
                                </h:commandButton>
                             </h:form>
                        </p:tab>
                    </p:tabView>
编辑:我去掉了外部标签,然后页面不再工作,然后我得到错误消息:

javax.faces.FacesException: <f:ajax> contains an unknown id ':form2' - cannot locate it in the context of the component j_idt77
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getResolvedId(AjaxBehaviorRenderer.java:285)
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.appendIds(AjaxBehaviorRenderer.java:272)
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.buildAjaxCommand(AjaxBehaviorRenderer.java:214)
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getScript(AjaxBehaviorRenderer.java:86)
    at javax.faces.component.behavior.ClientBehaviorBase.getScript(ClientBehaviorBase.java:103)
javax.faces.FacesException:包含未知id':form2'-无法在组件j_idt77的上下文中找到它
位于com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getResolvedId(AjaxBehaviorRenderer.java:285)
位于com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.appendIds(AjaxBehaviorRenderer.java:272)
在com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.buildAjaxCommand(AjaxBehaviorRenderer.java:214)
位于com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getScript(AjaxBehaviorRenderer.java:86)
位于javax.faces.component.behavior.ClientBehaviorBase.getScript(ClientBehaviorBase.java:103)
谢谢大家!!
Sami嵌套表单不是有效的html。这将导致意外行为。移除外部表单并查看哪些问题仍然存在

更新:


Primefaces选项卡视图也可以在没有表单的情况下工作。但是,如果选项卡中有输入元素和命令按钮,则需要表单。但这是一个html要求,不是特定于PF的。您应该只删除外部窗体,而不删除内部窗体。请使用您当前的版本更新您的问题。

Primefaces要求选项卡应以表单包围。然而,我试图去掉表单,结果是:包含未知id':form2'-无法在组件j_idt78的上下文中找到它。谢谢你的评论!我去掉了外部表单标签,没有成功:)在浏览器中检查页面的源代码。两个表单的ID是什么?选项卡中的表单以tabView ID为前缀(类似于:j_idXY:form2)。尝试在渲染和执行属性中使用完整id。
javax.faces.FacesException: <f:ajax> contains an unknown id ':form2' - cannot locate it in the context of the component j_idt77
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getResolvedId(AjaxBehaviorRenderer.java:285)
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.appendIds(AjaxBehaviorRenderer.java:272)
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.buildAjaxCommand(AjaxBehaviorRenderer.java:214)
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getScript(AjaxBehaviorRenderer.java:86)
    at javax.faces.component.behavior.ClientBehaviorBase.getScript(ClientBehaviorBase.java:103)