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" 在您的代码中是否真的有必要
嗨,我有一段时间一直在获取模态表单更新,它正在加载数据,它正在调用函数 - 它只是没有将数据传回服务器
<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" 在您的代码中是否真的有必要