使用widgetvar后在JSF + PrimeFaces中提交表单的问题

时间:2019-02-21 01:32:02

标签: jsf primefaces

我正在使用widgetVar在某些事件中通过javascript启用命令按钮。但是,在启用命令按钮后,当我单击按钮时,不会提交表单,并且不会在服务器端调用操作。

如果我不使用widgetVar并保持默认启用按钮,则相同的设置可以正常工作。它提交功能,调用操作并显示结果。

仅供参考,我正在使用ajax调用。

<p:commandButton id="btnSearch" value="Search" disabled="true"
    widgetVar="searchButton"
    ajax="true"
    action="#{someBean.someFunction(someBean.firstName, someBean.lastName)}">
    <p:ajax
        execute="firstName lastName"
        render="tabViewId:resultsDataTableId"
        onsuccess="showSearchResults()"/>
</p:commandButton>

Javascript-

function onSomeEvent(){
    PF('searchButton').enable();
}

请咨询。

1 个答案:

答案 0 :(得分:3)

如果您要在浏览器中调试“网络”选项卡,则在像这样启用按钮时有机会看到网络流量(另一方面,您可能没有,但应该检查一下)。因此,这意味着向服务器的提交实际上正在发生,只是未处理。为什么呢?

这是设计使然,它是JSF固有的功能,可以防止客户端篡改表单/数据/ ...其他现代(读取炒作)的客户端javascript框架也需要附加的OWASP保护才能实现相同的目的JSF具有的安全级别。因此,如果要从客户端启用按钮,则应进行ajax调用以更新按钮的状态(并检查是否允许客户端执行此操作)。或者,您可以默认启用它,并使用一些javascript最初将其禁用。我个人会选择前者。