代码之家  ›  专栏  ›  技术社区  ›  Panu Haaramo

当控件未呈现时,为什么h:link值调用bean方法?

  •  0
  • Panu Haaramo  · 技术社区  · 7 年前

    我的JSF页面上有这个

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

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

    问题似乎只是 value 属性,因为如果我包括 href="${mybean.url}" 然后 getUrl() 方法未被调用。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ondřej Xicht Světlík    7 年前

    作为 documentation 关于 rendered 属性:

    指示是否应渲染(在渲染响应阶段)或在任何后续表单提交中处理此组件的标志。

    这意味着 提供 在生命周期的最后阶段处理属性( Render Response Phase )而组件的值是在 Update model values Phase . 如果是新的(GET)请求,也会在 渲染响应阶段 但在检查 提供 属性设置组件的值意味着调用getter。

    没有 href 中的属性 h:link 这就是为什么在这种情况下没有调用getter。

    作为解决方法,您可以将 h: 链接 在里面 f:subview 它在早期阶段使用渲染属性。

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

    你可能想看看 this question ,它的答案和注释,还有指向JSF生命周期的链接,可能还有其他有用的信息。

    推荐文章