Я использую 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 сначала отключить его. Лично я бы выбрал первое.