使用ajax启用/禁用按钮时不会触发操作

时间:2012-02-22 10:53:41

标签: ajax jsf-2

我遇到了一个对我没有任何意义的问题。我有一个列表框,它使用简单的Ajax激活selectionChange-Events。我们的想法是,在选择列表中的项目之前,不会启用编辑按钮。所以我创建了以下代码。

<h:form>
    <h:selectManyListbox value="#{bean.selectedIds}">
        <f:selectItems value="#{bean.listOfItems}" />
        <f:ajax render="edit"
            listener="#{bean.selectionChanged}" />
    </h:selectManyListbox>
    <br />

    <h:commandButton id="add" value="#{msgs.add}"
        action="#{bean.addNew}" />

    <h:commandButton id="edit" value="#{msgs.edit}"
        disabled="#{bean.editButtonDisabled}"
        action="#{bean.edit}" />
</h:form>

按钮启用和禁用,但事实证明,编辑按钮不会触发任何操作(我在bean中的add-和edit-方法中添加了一些sysout,并且从不调用edit-method )...而是html的变化。上面的代码嵌套在一个简单的div中。当我单击编辑时,整个表单都在该div之外。

当我将这个ajax-behavior添加到add-button时,同样的情况发生在那里,反之亦然,当我从编辑按钮中删除disabled-attribute时一切正常???

我已经看过BalusC回答here,但我找不到与该列表有关的任何错误。没有嵌套表单等等......它只是一个带模板的简单页面。

我在JBoss 7.1.Final上使用Mojarra 2.1.2。

感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:2)

您已链接的答案的第5点涵盖了此问题。

  

在表单提交请求的应用请求值阶段,组件的rendered属性和所有父组件不应评估为false。然后,JSF将重新检查它,作为防止篡改/黑客攻击请求的一部分。将bean放在视图范围中和/或确保你在bean的(post)构造函数中预先初始化条件应该修复它。 这同样适用于组件的disabled属性,在处理表单提交期间不应评估为true

我建议将@RequestScoped上的BikeManagementPanelBean更改为@ViewScoped

答案 1 :(得分:0)

尝试这样的事情

<h:commandButton id="edit" value="#{msgs.edit}"
    disabled="#{bikeManagementPanelBean.editButtonDisabled eq false}"
    action="#{bean.edit}" />

尝试使用<h:panelGroup>再次包裹它并渲染而不是按钮...