【问题标题】:Commandbutton does not invoke action when disabled property is changed to false by JavaScript [duplicate]当 JavaScript 将 disabled 属性更改为 false 时,Commandbutton 不会调用操作 [重复]
【发布时间】:2012-06-10 12:04:19
【问题描述】:

我在 JSF + PrimeFaces 中构建了 Web 应用程序。在 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 代码:

如果属性 disabled 设置为 true:

<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">

帮助我处理这种情况。我希望命令按钮最初只被禁用,它只有在验证通过后才会被禁用,我希望它能够提交表单。

【问题讨论】:

    标签: javascript jsf jsf-2 primefaces


    【解决方案1】:

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

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

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

    【讨论】:

    • 仍然,你现在如何从 JS 更改复选框?同样的问题。我需要从小程序启用 commandButton,所以我通过 JS 方法来实现。
    • @esk: 让 JS 方法依次调用一个 JSF 方法。
    • 我想过,但无法让它工作。对于其他有同样问题的人,请按照@BalusC 的建议进行操作:stackoverflow.com/questions/9619906/…
    • 我必须将 id="button" 添加到
    • 我忽略了那部分。现已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多