disabled =“#{not recordsTransferSearch.isDisabled}”不调用isDisabled()方法

时间:2013-04-24 10:20:37

标签: jsf jsf-2 richfaces ajax4jsf

我试图通过定义一个动作方法并将其绑定到组件“disabled”属性来禁用jsf组件。

我的JSF组件代码段

<h:form id="bulk_sch_form1">
    <a4j:commandButton id="alls" value="a. Search records form this company"
        action="#{recordsTransferSearch.actionSearch}"
        reRender="srtDlGrd, dlod_msg_grd, pending_student_table"

        disabled="#{not recordsTransferSearch.isDisabled}">

    </a4j:commandButton>
</h:form>

Backing bean action方法

public boolean isDisabled() {
    if (searchResults != null) {
        return true;
    }
    return false;
}

searchResults仅在返回成功搜索结果后进行评估。但正如标题中所述,它根本没有调用动作方法isDisabled(),因此没有任何反应。

动作方法仅在我刷新页面时调用。

感谢。

1 个答案:

答案 0 :(得分:4)

你应该使用disabled作为字段获取器,就像在disabled="#{not recordsTransferSearch.disabled}"中一样,或者如果你的EL支持方法调用,即版本为2.2+,你应该添加空括号,{{1} },在方法调用结束时,如()

请注意,就目前而言,与您在评论中建议的内容相反,disabled="#{not recordsTransferSearch.isDisabled()}"会触发 Property'isDisabled'not found 错误。


根据您的评论,您并不完全了解disabled="#{bean.isDisabled}"属性在JSF中的工作原理。您似乎希望按钮在某些javascript事件上启用/禁用和/或通过某些action / actionlistener方法所做的某些更改。不是这种情况。仅当 disabled属性的EL表达式相应地评估为真/假时,才会禁用/启用该按钮。您甚至可以测试它:当您删除HTML disabled的禁用属性时,有效地在客户端启用它并调用该按钮,您将看到不会调用任何操作方法,而是调用其禁用的属性将在服务器上重新评估,并且由于它将评估为input,因此不会调用任何方法。

为了使其按预期工作,您需要通过AJAX调用重新呈现命令按钮(通过在更改结果的另一个false的{​​{1}}属性中指定其ID reRender方法,以便它返回<a4j:commandButton>),或同步(强制执行isDisabled()所需的评估),以便将禁用的条件评估为false。< / p>

此外,最好通过一个基本的例子来掌握它是如何运作的。

观点:

disabled

豆子:

false