Primefaces模态不更新

时间:2015-07-29 07:38:26

标签: jsf primefaces modal-dialog

嗨我已经卡住了一段时间得到一个模态表单来更新,它正在加载数据,它正在调用函数 - 它只是没有将数据传回服务器

    <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&amp; sceneDescription正在加载正确的数据,当模态/对话框关闭时,它们只是不保存任何更改。 saveSelectedScene()被称为罚款。

修改

我可以用

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

哪个不太漂亮。似乎问题是试图保存关闭事件。

2 个答案:

答案 0 :(得分:1)

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

作为一种解决方法,您可以使用remoteCommand组件并在close事件上调用它:

<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”

答案 1 :(得分:0)

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

希望这有帮助!