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