【问题标题】:PrimeFaces doesn't update inputtext of formA using values of formBPrimeFaces 不会使用 form 的值更新 formA 的输入文本
【发布时间】:2021-07-19 03:27:35
【问题描述】:

我正在尝试以 formUsuario 形式更新 ID 为 callef 的输入文本,它的 bean 是 psFacNomVialidad,它也在 MigracionController 但是,我正在尝试使用在我的 inputtext 中输入的值进行更新,id 为 calle 这个 inputtex 是另一种形式 (dlgFormVerif) 和有自己的 bean (psNomVialidad),psFactNomVialidad 的值与 psNomVialidad 相同,因为在对话框关闭后触发了分配值并更新 formUsuario 但由于某种原因无法正常工作,我错过了什么?

MigracionController.java

@ManagedBean
@ViewScoped
public class MigracionController extends AbstractBaseController {
    @Getter @Setter
    private String psNomVialidad;
    @Getter @Setter
    private String psFacNomVialidad;
    ...
    public void verificarDatosFacturacion() {
        ...
        psFacNomVialidad = psNomVialidad;
        ...
    }
    ...
}

migrasion5.xhtml

<h:form role="form" id="formUsuario" enctype="multipart/form-data">
    ...
    <p:panel id="DomFacturacion" class="panel" visible="#{(migracionController.pbDesDatoFacturacion)}">
        ...
            <p:inputText id="callef" class="inputTextForm" value="#{migracionController.psFacNomVialidad}"
                        required="true" rendered="#{(migracionController.pbDesDatoFacturacion)}"/>
        ...
    </p:panel>
    ...
<h:form>

.
.
.

<p:commandButton value="VERIFY INFO" id="showDlgVerif" class="btn" rendered="true" oncomplete="PF('dlgVerif').show();"/>

.
.
.

<p:dialog id="dlgVerif" header="Verify info" class="modal" widgetVar="dlgVerif" modal="true"
              resizable="false" closable="true">
    <p:ajax event="close" listener="#{migracionController.verificarDatosFacturacion()}" update=":formUsuario:DomFacturacion"/>
    <h:form id="dlgFormVerif" rendered="true">
        <input type="hidden" name="${_csrf.parameterName}" id="${_csrf.parameterName}" value="${_csrf.token}"/>
        <p:panel styleClass="panel" rendered="true">
            ...
            <p:inputText styleClass="inputTextForm" id="calle"
                        value="#{migracionController.psNomVialidad}"
                        required="#{!migracionController.pbClteExistente}">
                <p:ajax event="change" update=":formUsuario:callef"/>
            </p:inputText>
            ...
        </p:panel>
    </h:form>
    <p:commandButton styleClass="btnAzul" value="CLOSE" oncomplete="PF('dlgVerif').hide();"/>
</p:dialog>


【问题讨论】:

  • 为什么p:commandButton 在表格之外?我的意思是,你什么时候需要处理对话框中的输入文本?
  • p:commandButton 只是关闭对话框,表单在这个 ajax 中处理 &lt;p:ajax event="close" listener="#{migracionController.verificarDatosFacturacion()}" update=":formUsuario:DomFacturacion"/&gt; 值已分配,然后应该发生更新,但它没有
  • 但是您没有在那里处理 inputText,因此服务器总是看到旧值。我会像这样更改&lt;p:ajax event="change" update=":formUsuario:callef" process="@this"/&gt; 或在关闭时处理该项目/表单,或重新设计逻辑以实现更线性的侦听器/处理/更新。
  • 你几乎是对的,我不得不改变你的提议我的意思是这样&lt;p:ajax event="change" process=":formUsuario:callef" update="calle"/&gt;非常感谢你提供的线索
  • 哦,这与我的理解相反。将其作为答案,以便您将问题标记为已解决。

标签: jsf primefaces


【解决方案1】:

我在前面更新我的项目,但我没有处理它们,所以正如 WoAiNii 在 cmets 中建议的那样,我为 p:ajax 标签添加了 process 属性并更改了值以实现我想要的。 这是结果

<h:form role="form" id="formUsuario" enctype="multipart/form-data">
    ...
    <p:panel id="DomFacturacion" class="panel" visible="#{(migracionController.pbDesDatoFacturacion)}">
        ...
            <p:inputText id="callef" class="inputTextForm" value="#{migracionController.psFacNomVialidad}"
                        required="true" rendered="#{(migracionController.pbDesDatoFacturacion)}"/>
        ...
    </p:panel>
    ...
<h:form>

.
.
.

<p:commandButton value="VERIFY INFO" id="showDlgVerif" class="btn" rendered="true" oncomplete="PF('dlgVerif').show();"/>

.
.
.

<p:dialog id="dlgVerif" header="Verify info" class="modal" widgetVar="dlgVerif" modal="true"
              resizable="false" closable="true">
    <p:ajax event="close" listener="#{migracionController.verificarDatosFacturacion()}" update=":formUsuario:DomFacturacion"/>
    <h:form id="dlgFormVerif" rendered="true">
        <input type="hidden" name="${_csrf.parameterName}" id="${_csrf.parameterName}" value="${_csrf.token}"/>
        <p:panel styleClass="panel" rendered="true">
            ...
            <p:inputText styleClass="inputTextForm" id="calle"
                        value="#{migracionController.psNomVialidad}"
                        required="#{!migracionController.pbClteExistente}">
                <!-- the changes are on the below line -->
                <p:ajax event="change" process=":formUsuario:callef" update="calle"/>
            </p:inputText>
            ...
        </p:panel>
    </h:form>
    <p:commandButton styleClass="btnAzul" value="CLOSE" oncomplete="PF('dlgVerif').hide();"/>
</p:dialog>

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 2021-01-11
    • 2018-10-13
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多