动态包含页面表单无法在第一次单击时提交但第二次确定?

时间:2014-07-07 15:36:17

标签: jsf jsf-2.2

我想动态地将xhtml页面包含到另一个页面中。 我从一个组合中选择要包含的页面,列出我可以包含的不同页面, 并且包含的​​页面由AJAX在面板中显示。

包含的页面包含一个 如果我提交它:第一次只执行第1和第6阶段。 如果我第二次提交:一切正常,并被视为具有所有阶段的POST。 为什么?

我已经解释过这是JSF 2.0 / 2.1中的“正常”错误 但我在这里使用JSF 2.2.7和Tomcat7(没有cdi)

有什么问题?

INFO IN pour /m-page-include-v1/process.faces ¤¤¤¤¤ POST
INFO  AJAX BEFORE RESTORE_VIEW 1 for viewId=null 
INFO  AJAX AFTER  RESTORE_VIEW 1 for viewId=/process.xhtml
INFO  AJAX BEFORE RENDER_RESPONSE 6 for viewId=/process.xhtml 
INFO  AJAX AFTER  RENDER_RESPONSE 6 for viewId=/process.xhtml

INFO IN pour /m-page-include-v1/process.faces ¤¤¤¤¤ POST
INFO  AJAX BEFORE RESTORE_VIEW 1 for viewId=null 
INFO  AJAX AFTER  RESTORE_VIEW 1 for viewId=/process.xhtml
INFO  AJAX BEFORE APPLY_REQUEST_VALUES 2 for viewId=/process.xhtml 
INFO  AJAX AFTER  APPLY_REQUEST_VALUES 2 for viewId=/process.xhtml
INFO  AJAX BEFORE PROCESS_VALIDATIONS 3 for viewId=/process.xhtml 
INFO  AJAX AFTER  PROCESS_VALIDATIONS 3 for viewId=/process.xhtml
INFO  AJAX BEFORE RENDER_RESPONSE 6 for viewId=/process.xhtml 
INFO  AJAX AFTER  RENDER_RESPONSE 6 for viewId=/process.xhtml

process.xhtml“主要”页面:

<h:form id="chooseForm">
    <h:panelGrid columns="2">
        <h:outputLabel value="Choose your page to include" />
        <h:selectOneMenu id="pageList" value="#{anyPageBean.page}">
            <f:selectItems value="#{anyPageBean.pageList}" var="w" itemValue="#{w}" itemLabel="#{w}" />
            <f:ajax event="change" execute="@form" render=":panelForDynaPage  :globalMessages" />
        </h:selectOneMenu>
    </h:panelGrid>
</h:form>

<h:panelGroup id="panelForDynaPage">
    <ui:include id="includeContenu" src="#{anyPageBean.page}" />
</h:panelGroup>

包含页面:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">

    <h:form id="userForm">
        <h:messages styleClass="messages" id="messages" />

        <h:panelGrid columns="2">
            <h:outputLabel value="#{i18n.name}" />
            <h:panelGroup>
                <h:inputText id="name" value="#{userForm.name}" label="#{i18n.name}" />
            </h:panelGroup>
        </h:panelGrid>

        <h:commandButton actionListener="#{userAction.checkListener()}" value="ok" id="check">
            <f:ajax execute="@form" render="@form" />
        </h:commandButton>
    </h:form>

</ui:composition>

1 个答案:

答案 0 :(得分:1)

正如@Ganji所述,link中的第7点是我的问题。

您可以找到解决方案here

同样在这个链接中描述了我认为最简单的解决方案:包括@BalusC Omnifaces&gt; 1.7。我试过1.8.1版 并将以下内容添加到我的&#34; main&#34;页面,它就像一个魅力!

<h:body>
<!-- should be placed inside h:body  -->
<h:outputScript library="omnifaces" name="fixviewstate.js" target="head" />