我正在使用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();
}
请咨询。
答案 0 :(得分:3)
如果您要在浏览器中调试“网络”选项卡,则在像这样启用按钮时有机会看到网络流量(另一方面,您可能没有,但应该检查一下)。因此,这意味着向服务器的提交实际上正在发生,只是未处理。为什么呢?
这是设计使然,它是JSF固有的功能,可以防止客户端篡改表单/数据/ ...其他现代(读取炒作)的客户端javascript框架也需要附加的OWASP保护才能实现相同的目的JSF具有的安全级别。因此,如果要从客户端启用按钮,则应进行ajax调用以更新按钮的状态(并检查是否允许客户端执行此操作)。或者,您可以默认启用它,并使用一些javascript最初将其禁用。我个人会选择前者。