0

我的 JSF 页面上有这个

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

控件未呈现,但仍getStatus()调用mybean. 为什么?

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

我正在使用 Mojarra 2.2.12 附带的 TomEE 7.04 羽流。

4

1 回答 1

1

正如文档所说的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 生命周期的链接,也许还有其他有用的信息。

于 2018-01-02T09:31:21.570 回答