Primefaces 模态不更新

Primefaces modal not updating

嗨,我有一段时间一直在获取模态表单更新,它正在加载数据,它正在调用函数 - 它只是没有将数据传回服务器

    <h:form id="modal">
    <p:dialog  widgetVar="modalText"  styleClass="modalSceneText" modal="true" dynamic="true" >

        <p:panel id="sceneText">

            <p:inputTextarea id="sceneName" immediate="true"  style="width: 200px" rows="1" counter="labelCount" maxlength="20" counterTemplate="{0} characters remaining." value="#{CustomerDashboardController.selectedScene.title}"/><h:outputText id="labelCount" /><br/>
            <p:inputTextarea id="sceneDescription" immediate="true"  rows="10" cols="50" value="#{CustomerDashboardController.selectedScene.description}" counter="descriptionCount" maxlength="1000" counterTemplate="{0} characters remaining." autoResize="false" /><br/>
            <h:outputText id="descriptionCount" />

        </p:panel>

        <p:ajax event="close" process="@form" immediate="true" update=":form:locationScenes" listener="#{CustomerDashboardController.saveSelectedScene()}" />

    </p:dialog>
    </h:form>

表格内外都试过了,能想到的都试过了..

sceneName 和 sceneDescription 正在加载正确的数据,只是在 modal/dialog 关闭时它们没有保存任何更改。 saveSelectedScene() 被称为罚款。

编辑

我可以用

保存它
<p:commandLink value="save" action="#{CustomerDashboardController.saveSelectedScene()}"/>

这不是很漂亮。似乎问题在于试图保存关闭事件。

您是否尝试过从输入元素和 p:ajax 标签中删除 immediate="true"?在我看来你不需要它——尤其是在 p:ajax 标签上。

希望对您有所帮助!

您的问题是从 ajax 组件中的侦听器调用的 saveSelectedScene() 方法正在使用 inputTextarea 的旧值。

作为解决方法,您可以使用 remoteCommand 组件并在关闭事件中调用它:

<h:form id="modal">
    <p:remoteCommand name="rc" update=":form:locationScenes" actionListener="#{CustomerDashboardController.saveSelectedScene()}" />
    <p:dialog  widgetVar="modalText"  styleClass="modalSceneText" modal="true" dynamic="true" >

        <p:panel id="sceneText">

            <p:inputTextarea id="sceneName" immediate="true"  style="width: 200px" rows="1" counter="labelCount" maxlength="20" counterTemplate="{0} characters remaining." value="#{CustomerDashboardController.selectedScene.title}"/><h:outputText id="labelCount" /><br/>
            <p:inputTextarea id="sceneDescription" immediate="true"  rows="10" cols="50" value="#{CustomerDashboardController.selectedScene.description}" counter="descriptionCount" maxlength="1000" counterTemplate="{0} characters remaining." autoResize="false" /><br/>
            <h:outputText id="descriptionCount" />

        </p:panel>

        <p:ajax event="close" process="@form" immediate="true"   oncomplete="rc()" />

    </p:dialog>
    </h:form>

还要考虑 immediate="true" 在您的代码中是否真的有必要