【发布时间】:2020-10-27 11:42:21
【问题描述】:
- PrimeFaces:7.0
- JSF:2.2.13
- JBoss:7.1
- Java:1.8
- 铬:83.0.4103.116
我有一个简单的确认对话框可以转到另一个页面,应该以文本形式提供该操作的原因。 归结为以下几行代码:
<p:dialog id="dlg" widgetVar="dlg" modal="true">
<h:form id="dlgForm">
<p:inputText id="reason" required="true" value="#{bean.reason}"/>
<p:message for="reason"/>
<p:commandButton id="proceed" value="Proceed" update="dlgForm" action="#{bean.action}"/>
<p:commandButton id="cancel" value="Cancel" resetValues="true" onclick="PF('dlg').hide()">
<p:ajax update="dlgForm" resetValues="true"/>
</p:commandButton>
</h:form>
</p:dialog>
还有豆子:
@ManagedBean(name = "bean")
@SessionScoped
class Bean {
public String processGrundFuerExportDlg() {
PrimeFaces.current().executeScript("PF('dlg').hide()");
return "other_page";
}
}
我的要求:
- 对话框以空的“原因”-inputText 打开。
- 如果按下“取消”:对话框应该关闭
- 如果按下“继续”:
- 如果原因不为空:关闭对话框并导航到“其他页面”
- 如果返回为空:显示错误消息并且不要关闭对话框
我对这段代码的问题:行
PrimeFaces.current().executeScript("PF('dlg').hide()");
似乎在当前页面离开后执行,导致找不到“dlg”(JavaScript 错误)。 未正确关闭的对话框会产生令人讨厌的副作用:稍后返回我的第一页后,对话框叠加层保持活动状态,并且无法使用鼠标激活 inputText 元素(TAB 有效)。事件循环中的覆盖逻辑阻止鼠标点击被传递到页面上的组件。
我的问题:
- 应如何使用 JSF 和 PrimeFaces 正确实施此标准场景?
- 如果需要升级到其他版本,是否有一些解决方法可以在不升级的情况下删除陈旧的叠加层?
免责声明:我在 StackOverflow 上研究了许多相关问题,并尝试了所有提出的解决方案,但均未成功。比如这个:Keep p:dialog open when a validation error occurs after submit
【问题讨论】:
-
听起来像xyproblem.info
-
@JasperdeVries 我不明白,我的问题 X 应该是什么。我只想让一个标准的“带有验证的对话框中的表单”工作。我想,像 JSF 和 PrimeFaces 这样成熟的技术,这应该不是问题。
-
不关闭对话框并导航到新页面怎么样?
-
@JasperdeVries 我很乐意,但这正是我的问题(见问题)。对话框覆盖保持打开状态可防止将鼠标事件传递到小部件。阅读我的问题的相应段落。
-
“稍后返回我的第一页后”如何?通过使用浏览器的后退按钮?请提供minimal reproducible example
标签: jsf primefaces