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