为什么 h:link value 在控件未渲染时调用 bean 方法?
Why does h:link value call bean method when the control is not rendered?
我的 JSF 页面上有这个
<h:link rendered="false" value="${mybean.status}" />
控件未呈现,但它仍调用 mybean
中的 getStatus()
方法。为什么?
问题似乎只与 value
属性有关,因为如果我包含 href="${mybean.url}"
,则不会调用 getUrl()
方法。
我正在使用 Mojarra 2.2.12 附带的 TomEE 7.04 plume。
正如 documentation 所说的 rendered
属性:
Flag indicating whether or not this component should be rendered (during Render Response Phase), or processed on any subsequent form submit.
这意味着 rendered
属性是在最后一个生命周期阶段 (Render Response Phase
) 处理的,而组件的值是在 Update model values Phase
期间设置的。在新的 (GET) 请求的情况下,它也在 Render Response Phase
中设置,但显然在检查 rendered
属性之前。设置组件的值意味着调用 getter.
h:link
中没有 href
属性,这就是为什么在这种情况下没有调用 getter。
作为解决方法,您可以将 h:link
包装在 f:subview
中,后者在早期阶段使用渲染属性。
<f:subview rendered="false">
<h:link rendered="false" value="${mybean.status}" />
</f:subview>
您可能想查看 ,它的答案和评论,其中有指向 JSF 生命周期的链接,也许还有其他有用的信息。
我的 JSF 页面上有这个
<h:link rendered="false" value="${mybean.status}" />
控件未呈现,但它仍调用 mybean
中的 getStatus()
方法。为什么?
问题似乎只与 value
属性有关,因为如果我包含 href="${mybean.url}"
,则不会调用 getUrl()
方法。
我正在使用 Mojarra 2.2.12 附带的 TomEE 7.04 plume。
正如 documentation 所说的 rendered
属性:
Flag indicating whether or not this component should be rendered (during Render Response Phase), or processed on any subsequent form submit.
这意味着 rendered
属性是在最后一个生命周期阶段 (Render Response Phase
) 处理的,而组件的值是在 Update model values Phase
期间设置的。在新的 (GET) 请求的情况下,它也在 Render Response Phase
中设置,但显然在检查 rendered
属性之前。设置组件的值意味着调用 getter.
h:link
中没有 href
属性,这就是为什么在这种情况下没有调用 getter。
作为解决方法,您可以将 h:link
包装在 f:subview
中,后者在早期阶段使用渲染属性。
<f:subview rendered="false">
<h:link rendered="false" value="${mybean.status}" />
</f:subview>
您可能想查看