Enable\Disable 命令按钮取决于 URL 参数
Enable\Disable commandbutton depending on URL parameter
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
在主页中将此变量用于 enable\disable 按钮时,它不起作用(例如,它始终计算为 false):
<h:commandButton disabled="#{!applicationBean.buttonEnabled}">
有什么建议吗?
出现计时问题。操作事件在应用请求值阶段排队。作为防止篡改请求的一部分,它还会在此时评估 disabled
(和 rendered
)属性。然而,由于它实际上只是在渲染响应阶段之前设置的,因此它确实总是会评估其默认值,这显然是 false
.
您需要在 @PostConstruct
中执行基于请求参数的初始化作业(<f:viewParam>
确实不合适),或者让 disabled
属性检查请求参数本身而不是 bean 属性(bean 属性 确实不合适)。
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
在主页中将此变量用于 enable\disable 按钮时,它不起作用(例如,它始终计算为 false):
<h:commandButton disabled="#{!applicationBean.buttonEnabled}">
有什么建议吗?
出现计时问题。操作事件在应用请求值阶段排队。作为防止篡改请求的一部分,它还会在此时评估 disabled
(和 rendered
)属性。然而,由于它实际上只是在渲染响应阶段之前设置的,因此它确实总是会评估其默认值,这显然是 false
.
您需要在 @PostConstruct
中执行基于请求参数的初始化作业(<f:viewParam>
确实不合适),或者让 disabled
属性检查请求参数本身而不是 bean 属性(bean 属性 确实不合适)。