javascript - 当 JavaScript 将 disabled 属性更改为 false 时,Commandbutton 不会调用操作

标签 javascript jsf jsf-2 primefaces

<分区>

我在 JSF + PrimeFaces 中构建了 Web 应用程序。在网络表单中,我将 primefaces 命令按钮的禁用属性设置为 true。 在对表单输入字段执行自定义客户端验证后加载表单时,我根据表单上的用户输入将命令按钮的禁用属性设置为 false 或 true。 注意:这里如果所有验证都通过按钮将被启用,但同时如果用户编辑某些输入并且验证失败则按钮将再次被禁用。

<p:commandButton id="saveButton" value="Save" actionListener="#{some method of bean}" 
update="component to update" disabled="true" />

但是按钮不能正常工作,我的意思是表单没有被提交。

但是如果按钮的 disabled 属性在开始时没有设置为 true,即使在自定义验证期间它被 javascript 禁用/启用(如上所述)它也能正常工作。

我不明白这个表单提交是如何依赖命令按钮的禁用属性的初始值的,即使我是通过 javascript 设置它的。

这是浏览器源代码中显示的 HTML 代码:

如果属性禁用设置为真:

<button id="saveButton" 
class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" 
type="submit" 
onclick="PrimeFaces.ab({formId:'createAccessPrivilegeForm',source:'saveButton',process:'@all',update:'centerPanel leftNavigationForm:leftNavigationTabView'});return false;" 
name="saveButton" 
role="button" 
aria-disabled="false">

如果 disabled 属性设置为 false:

<button id="saveButton" 
class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only ui-state-disabled" 
disabled="disabled" 
type="submit" 
onclick="PrimeFaces.ab({formId:'createRoleForm',source:'saveButton',process:'@all',update:'centerPanel leftNavigationForm:leftNavigationTabView'});return false;" 
name="saveButton" 
role="button" 
aria-disabled="true">

帮我解决这个问题。我希望命令按钮最初只被禁用,只有在验证通过后它才会被禁用,我希望它能够进行表单提交。

最佳答案

您需要在 JSF 端更改禁用属性,而不是在 JavaScript 端。在 JSF 中处理表单提交期间,disabled 属性会根据 JSF 组件树状态重新计算。在客户端手动编辑 HTML DOM 树不会以任何方式自动更改服务器端的 JSF 组件树。

您需要用一种合理的 JSF 方法替换您的 JavaScript 方法来启用/禁用按钮。这是一个基于复选框的基本示例:

<h:selectBooleanCheckbox value="#{bean.checked}">
    <p:ajax update="button" />
</h:selectBooleanCheckbox>
<p:commandButton id="button" ... disabled="#{bean.checked}" />

关于javascript - 当 JavaScript 将 disabled 属性更改为 false 时,Commandbutton 不会调用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968517/

相关文章:

jsf-2 - 如何在可排序数据表中按 JSF 标签排序

javascript - 如何发送已更改的 Angular 形式数据?

javascript - 强制渲染/让浏览器短暂休息?

javascript - 动态图像加载谷歌浏览器

java - 从 HttpServletRequest 获取原始请求字符串

java - JSF session 范围

jsf - 如何使用 <f :ajax> to set updated value in managed bean when value of <h:inputText> is changed

jsf - 在不同布局之间拖放

javascript - 单击时使用 jQuery 和 AJAX 更改页面内容

jsf-2 - 在 jsf 中多次调用 Ajax 方法