我试图通过定义一个动作方法并将其绑定到组件“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()
,因此没有任何反应。
动作方法仅在我刷新页面时调用。
感谢。
答案 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