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 属性确实不合适(。