首页 文章

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

提问于
浏览
1

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

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

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

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

我无法理解这个表单submit-ion如何依赖于命令按钮的disabled属性的初始值,即使我通过javascript设置它 .

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

如果属性禁用设置为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">

如果禁用属性设置为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">

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

1 回答

  • 6

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

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

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

相关问题