JSF在执行ajax更新时重置字段

JSF在执行ajax更新时重置字段,ajax,jsf-2,Ajax,Jsf 2,我在JSF页面上遇到了一个问题,我在first billing first name字段中键入了一个名称。如果我点击复制账单地址复选框;这将停止呈现delivery address面板,并通过ajax将其隐藏,我刚刚在第一个字段中键入的值将重置为其以前的状态 JSF页面 <h:form> <p:inputText value="#{addressBean.billingAddress.firstName}" required="true"/ > <

我在JSF页面上遇到了一个问题,我在first billing first name字段中键入了一个名称。如果我点击复制账单地址复选框;这将停止呈现delivery address面板,并通过ajax将其隐藏,我刚刚在第一个字段中键入的值将重置为其以前的状态

JSF页面

<h:form>
    <p:inputText value="#{addressBean.billingAddress.firstName}" required="true"/ >

    <p:selectBooleanCheckbox value="#{addressBean.copyBillingAddress}" id="duplicateBillingDetails">
        <f:ajax render="@form" />
    </p:selectBooleanCheckbox>

    <h:panelGrid rendered="#{not addressBean.copyBillingAddress}" columns="3">
        <p:inputText value="#{addressBean.deliveryAddress.firstName}"/>
    </h:panelGrid>

    <p:commandButton value="Checkout" action="#{addressBean.saveAddress}"/>
</h:form>
默认情况下,
只处理当前组件,如
execute=“@this”
所示。因此,所有其他输入组件的提交值将不会被处理,因此不会更新到模型中。但是,您可以通过
render=“@form”
强制使用所有其他输入组件的当前(未更新!)模型值刷新表单的整个HTML输出

假设您的目的是不必要地转换/验证/更新所有其他输入组件,那么最好使
render
属性更具体。只更新真正需要更新的内容,而不是整个表单

<p:selectBooleanCheckbox value="#{addressBean.copyBillingAddress}" id="duplicateBillingDetails">
    <f:ajax render="copyBillingAddress" />
</p:selectBooleanCheckbox>

<h:panelGroup id="copyBillingAddress">
    <h:panelGrid rendered="#{not addressBean.copyBillingAddress}" columns="3">
        <p:inputText value="#{addressBean.deliveryAddress.firstName}"/>
    </h:panelGrid>
</h:panelGroup>
请注意,这可能会不必要地触发这些输入组件的转换/验证

另见:
<p:selectBooleanCheckbox value="#{addressBean.copyBillingAddress}" id="duplicateBillingDetails">
    <f:ajax render="copyBillingAddress" />
</p:selectBooleanCheckbox>

<h:panelGroup id="copyBillingAddress">
    <h:panelGrid rendered="#{not addressBean.copyBillingAddress}" columns="3">
        <p:inputText value="#{addressBean.deliveryAddress.firstName}"/>
    </h:panelGrid>
</h:panelGroup>
<f:ajax execute="@form" render="@form" />