JSF 2允许使用<f:viewParam>
标记初始化URL参数。
例如:
<f:viewParam id="name" name="name"
value="#{applicationBean.name}" required="true" />
然后在backing bean中使用此参数来使用<f:event>
加载一些对象。
例如:
<f:event type="preRenderView"
listener="#{applicationBean.preRenderView}" />
preRenderView()
中的applicationBean
方法将一些布尔变量buttonEnabled
设置为true \ false
在主页面中使用此变量启用\ disable按钮时,它不起作用(例如它总是评估为false):
<h:commandButton disabled="#{!applicationBean.buttonEnabled}">
有什么建议吗?
答案 0 :(得分:1)
有时间问题。在应用请求值阶段,操作事件排队。作为防范篡改请求的一部分,它还会评估此时的disabled
(和rendered
)属性。但是,因为它实际上只是在渲染响应阶段之前设置,所以它确实总是会计算到它的默认值,显然是false
。
您需要在@PostConstruct
中执行基于请求参数的初始化作业(<f:viewParam>
确实是不可行的),或者让disabled
属性检查请求参数本身而不是bean属性(bean属性确实可以保险)。