我的 JSF 页面上有这个
<h:link rendered="false" value="${mybean.status}" />
控件未呈现,但仍getStatus()
调用mybean
. 为什么?
问题似乎仅与value
属性有关,因为如果我包含href="${mybean.url}"
然后getUrl()
方法不会被调用。
我正在使用 Mojarra 2.2.12 附带的 TomEE 7.04 羽流。
正如文档所说的rendered
属性:
指示是否应渲染此组件(在渲染响应阶段)或在任何后续表单提交时处理的标志。
这意味着rendered
属性是在最后一个生命周期阶段(Render Response Phase
)处理的,而组件的值是在Update model values Phase
. 如果是新的 (GET) 请求,它也被设置在Render Response Phase
但显然在检查rendered
属性之前。设置组件的值意味着调用 getter。
没有href
属性,h:link
这就是在这种情况下没有调用 getter 的原因。
作为一种解决方法,您可以在早期阶段将您的使用渲染属性包装h:link
在其中。f:subview
<f:subview rendered="false">
<h:link rendered="false" value="${mybean.status}" />
</f:subview>
您可能想查看这个问题、它的答案和评论,还有指向 JSF 生命周期的链接,也许还有其他有用的信息。