启用禁用命令按钮,具体取决于 URL 参数



JSF 2 允许使用 <f:viewParam> 标记初始化 URL 参数。

例如:

<f:viewParam id="name" name="name"
            value="#{applicationBean.name}" required="true" />

然后在后备 Bean 中使用此参数,使用 <f:event> 加载一些对象。

例如:

<f:event type="preRenderView"
            listener="#{applicationBean.preRenderView}" />

applicationBean 中的 preRenderView() 方法将一些布尔变量buttonEnabled设置为 true\false

当在主页中使用此变量来启用\禁用按钮时,它不起作用(例如,它总是计算为 false(:

<h:commandButton disabled="#{!applicationBean.buttonEnabled}">

有什么建议吗?

存在时间问题。操作事件在应用请求值阶段排队。作为防止篡改请求的一部分,它还会在这一点上评估disabled(和rendered(属性。但是,由于它仅在渲染响应阶段之前实际设置,因此它确实将始终计算为其默认值,这显然是false

您需要在@PostConstruct中执行基于请求参数的初始化作业(然后<f:viewParam>确实不合适(,或者让 disabled 属性检查请求参数本身而不是 bean 属性(然后 bean 属性确实不合适(。

最新更新