在JSF中渲染一个禁用按钮

时间:2011-09-01 14:41:09

标签: jsf richfaces

我正在尝试渲染一个应该最初被禁用的按钮,并且在某些时候由客户端操作启用。我正在使用a4j中的组件,代码如下:

<a4j:commandButton id="myButton" disabled="true" onclick="myFunction()">

问题是当disabled属性设置为true时,事件没有附加到组件,导致这个html代码:

<input type="button" onclick="return false" ... />

因此,当我尝试通过javascript启用时,按钮已启用,但按钮没有附加事件监听器。

到目前为止,我能想到的唯一两个解决方案是:

  • 将disabled属性的值分配给bean属性并重新呈现按钮。
  • 通过javascript
  • 在加载页面上初始启用和禁用

这两个选项都可以使用,但它们不是很干净,每次启用按钮时我都不想向服务器发出请求。

1 个答案:

答案 0 :(得分:2)

这就是基于组件的基于组件的MVC框架如JSF的工作方式。作为防范篡改/被黑客入侵请求的一部分,框架会在输入元素即将应用请求值时重新评估输入元素的disabled(和rendered)属性。否则,最终用户将能够调用操作或提交他们不允许通过服务器端限制执行的值,这可能会对攻击敞开大门。

你提到的两个解决方案都很好。如果你不想允许最终用户篡改/破解它,我会选择第一个。它可以通过ajax轻松完成。