JSF2和Primefaces属性Ajax=false

JSF2和Primefaces属性Ajax=false,primefaces,jsf-2.2,Primefaces,Jsf 2.2,我有一个表单,它有一个commandlink,可以打开一个模式对话框,该对话框保存了一个inputtext和一个按钮,当我在inputtext中输入一个值时,该值必须复制到第一个表单中的另一个inputtext,但属性更新不会更新第一个表单中的inputtext,我必须将属性ajax=“false”在对话框的按钮save中,重新加载页面,因此对话框的inputtext中的值被复制到第一个表单的inputtext。我想知道是否有其他方法可以在不使用属性ajax=“false”的情况下更新此值,并且

我有一个表单,它有一个commandlink,可以打开一个模式对话框,该对话框保存了一个inputtext和一个按钮,当我在inputtext中输入一个值时,该值必须复制到第一个表单中的另一个inputtext,但属性更新不会更新第一个表单中的inputtext,我必须将属性ajax=“false”在对话框的按钮save中,重新加载页面,因此对话框的inputtext中的值被复制到第一个表单的inputtext。我想知道是否有其他方法可以在不使用属性ajax=“false”的情况下更新此值,并且不重新加载页面

创建_store.xhtml

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

<h:panelGrid columns="3" width="100%" border="0" columnClasses="colC1,colC2">
    <h:outputText  value="Code: " style="margin-right:20px;"/>  
    <p:inputText id="idCodProvider" value="#{storeBean.au.code}" size="84"/>

    <h:outputText  value="Name: " style="margin-right:20px;"/>  
    <p:inputText id="idName" value="#{storeBean.au.name}" size="84"/>

    <p:commandLink id="idAdressLink" style="margin-right:20px;" actionListener="#{storeBean.selectAdress}" 
                   update=":idFormAdress:idPgADressStore" >  
         <h:outputText value="Adress:" />
    </p:commandLink>
    <p:inputText id="idAdressStore" label="Adress" value="#{storeBean.au.adressStore}" size="84"/>
    <h:outputText value="&#160;&#160;&#160;" />
</h:panelGrid>

dialog_address.xhtml

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

<h:panelGrid id="idPgAdressStore" columns="2" columnClasses="col1,col2">
    <h:outputLabel for="idAdress" value="Adress: " />  
    <p:inputText id="idAdress"  label="Adress" size="40" value="#{adressBean.au.strAdress}"/>
    <f:facet name="footer">
        <h:panelGrid width="100%" columns="2" style="text-align:center">
            <p:commandButton id="idBtSaveDir" value="Save" actionListener="#{storeBean.saveAdress}" 
                             update=":idFormAdress,:idFormStore" onComplete="PF('dlgDirStore').hide()"/>
            <p:commandButton id="idBtCancelDir" value="Cancel" type="button" onclick="PF('dlgDirStore').hide()"/>
        </h:panelGrid>
    </f:facet>
</h:panelGrid>


你想要实现的目标是完全合法的。我假设:1。storeBean.SaveAddress将值复制到storeBean.au.AddressStore字段;2.idAdressStore和idAdress输入在两个单独的h:form-s中;3.代码中没有嵌套的h:forms;4. :idFormStore正确地指向包含您要更新的字段的表单-是吗?您可以,有两个表单,idFormStore使用idAdressStore在create_store.xhtml中工作,idFormStore使用idAdressStore在对话框_address.xhtml中工作,idAdressI'd try update=“:{p:component('fieldId')}”以确保识别正确的字段没有问题。我还将onComplete更改为onComplete(它是这样工作的吗?)。我找不到任何可能真正导致此问题的东西-但showcase中有一个此类更新的示例:-也许它可以帮助您自己发现差异。您再次还行,我在这里写得很差,但在我的代码中,它是不完整的。我使用的模板左侧有一棵树,右侧有一个输出面板,outputpanel包含create_store.xhtml,因此当我第一次使用create_store.xhtml时,我可以在树的各个分支之间进行更改,但我更改到了另一个分支,并返回到create_store.xhtml的分支。该对话框在使用ajax更新时出现问题,我必须重新加载页面或放置ajax=“false”因为这很有效,但我想知道另一种不用ajax=“false”进行更新的方法,我的提示是,存在错误的
update
属性值。尝试udpate=“@all”。如果有效,请尝试跟踪组件的正确ID。