我在我的JSF页面上有这个
<h:link rendered="false" value="${mybean.status}" />
控件未呈现但仍在getStatus()
中调用mybean
方法。为什么呢?
问题似乎只有value
属性,因为如果我包含href="${mybean.url}"
,那么getUrl()
方法就不会被调用。
我使用的是Mojarra 2.2.12附带的TomEE 7.04羽毛。
答案 0 :(得分:1)
正如documentation所说的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>
您可能需要查看this question,其答案和评论,指向JSF生命周期的链接以及其他有用的信息。