我想知道当无效的widgetvar传递到primefaces时会发生什么。我知道这会导致问题,但我想知道是否有一个明确的行为/预期的结果。
一个简单的例子:假设我们有一个对话:
<p:dialog widgetVar="dialogVar" header="Test">
<h:form>
<h:outputText value="Test"/>
<p:commandButton value="Close Dialog" onclick="PF('badInput').hide();" immediate="true"/>
</h:form>
</p:dialog>
当"关闭对话框"按钮被点击时,Primefaces做什么?(假设没有其他对象将'badInput'作为widgetvar)
当您使用不正确的小部件var时,PrimeFaces不会"做"任何事情。PF('badInput')
将返回undefined
,这导致.hide()
失败。这是纯JavaScript,与PrimeFaces无关。当浏览器遇到JavaScript错误时,JavaScript将停止执行。所以你最好确保你的widget存在,或者先检查一下。
您可以简单地检查undefined
:
function hideDialog(widgetVar) {
if (PF(widgetVar) !== undefined) {
PF(widgetVar).hide();
}
}
或使用try
和catch
:
function hideDialog(widgetVar) {
try {
PF(widgetVar).hide();
}
catch (error) {
// console.log("Caught error: " + error);
}
}
参见:
- 忽略页面中的javascript语法错误,继续执行脚本
这个对我来说很有用:
if (PrimeFaces.widgets['yourWidget'] !== undefined) {
// do stuff
}