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

问题描述 投票:0回答:1

我正在使用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();
}

请指教。

jsf primefaces
1个回答
3
投票

如果您在浏览器中调试网络选项卡,那么当按钮启用时,您可能会看到网络流量(另一方面,您可能没有,但您应该检查过这个)。这意味着服务器的提交实际上正在发生,它只是没有处理。那是为什么?

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

© www.soinside.com 2019 - 2024. All rights reserved.