为什么h:链接值调用bean方法没有呈现控件?

时间:2017-12-31 13:47:38

标签: jsf-2.2 mojarra tomee-7

我在我的JSF页面上有这个

<h:link rendered="false" value="${mybean.status}" />

控件未呈现但仍在getStatus()中调用mybean方法。为什么呢?

问题似乎只有value属性,因为如果我包含href="${mybean.url}",那么getUrl()方法就不会被调用。

我使用的是Mojarra 2.2.12附带的TomEE 7.04羽毛。

1 个答案:

答案 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生命周期的链接以及其他有用的信息。