如果你传入一个无效的 widgetvar 会发生啥?

Posted

技术标签:

【中文标题】如果你传入一个无效的 widgetvar 会发生啥?【英文标题】:What happens if you pass in an invalid widgetvar?如果你传入一个无效的 widgetvar 会发生什么? 【发布时间】:2017-02-04 04:47:49 【问题描述】:

我想知道当一个无效的 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)

【问题讨论】:

@Kukeltje 我试过了。我经历过。我知道这会弄乱网页,但我正在寻找关于 primefaces 对 bad 变量的实际作用的具体解释。 另外,为什么投反对票?我假设一个来自@Kukeltje,他显然不明白我在问什么。 @Kukeltje 如果我知道该怎么做,我就不会问我的问题。介意解释一下吗?我在日志文件中没有看到表明后台发生了什么。 【参考方案1】:

这个适用于我的 Primefaces 7.0:

if (PrimeFaces.widgets['yourWidget'] !== undefined) 
    // do stuff

【讨论】:

【参考方案2】:

当您使用不正确的小部件 var 时,PrimeFaces 不会“做”任何事情。 PF('badInput') 将返回 undefined,这会导致 .hide() 失败。这是纯 javascript,与 PrimeFaces 无关。当您的浏览器遇到 JavaScript 错误时,JavaScript 执行将停止。所以你最好确保你的小部件存在或先检查它。

您可以简单地检查undefined

function hideDialog(widgetVar) 
    if (PF(widgetVar) !== undefined) 
        PF(widgetVar).hide();
    

或使用trycatch

function hideDialog(widgetVar) 
    try 
        PF(widgetVar).hide();
    
    catch (error) 
        // console.log("Caught error: " + error);
    

另见:

Ignore javascript syntax errors in a page and continue executing the script

【讨论】:

很好的答案!这正是我希望找到的,谢谢! @Kukeltje 留下一个好的答案会花费你更少的时间,然后留下一堆关于这“非常容易”发现的咸味cmets。我不知道答案,也不知道如何找到它,这就是我问一个问题的原因。仅仅因为你知道如何做某事并不意味着我会做。这就是创建 *** 的原因。 @Kukeltje 如果您有时间留下多个无用的 cmets,您有时间整理一个简短的答案,或者给出直接答案或给出找到答案的步骤。你不必花时间在这个网站上寻找那些在某个主题上比你了解更少的人来贬低他们。

以上是关于如果你传入一个无效的 widgetvar 会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

当目前没有 wsarecv 时,传入数据会发生啥

尝试连接到已经处理请求的套接字的传入连接会发生啥?

如果你发送一个在 React Xstate 中不存在的事件会发生啥?

iPhone - 如果在自动释放后保留会发生啥?

如果你在同一个集合上调用同一个迭代器两次会发生啥?

如果你违反了单子法则,你会发生啥?