仅当元素存在时,Ajax才会呈现

时间:2015-08-04 14:27:27

标签: ajax jsf jsf-2

我有以下用例:我在屏幕上有一个按钮,它会重新呈现其他元素。

<h:commandButton value="button">
  <f:ajax  execute="@this" render="toBeRendered" />
</h:commandButton>
......
<h:outputPanel id="toBeRendered"/>

我的问题是这个其他元素(toBeRendered)并不总是存在,因为它位于页面上的ui组合中,因此JSF在构建视图时失败并且无法在render属性中找到该元素。 f:ajax标签。我知道在较新版本的mojarra中不再存在此验证,但更新不是一种选择。是否有人有一个解决方法,只有在其他元素存在时才会呈现?

1 个答案:

答案 0 :(得分:3)

使用UIComponent#findComponent()找到它,然后打印其ID。如果找不到,那么无论如何都会考虑null

<h:commandButton ...>
    <f:ajax ... render="#{component.findComponent('toBeRendered').id}" />
</h:commandButton>
...
<h:panelGroup id="toBeRendered" />

请注意#{component}是一个引用当前UIComponent实例的隐式EL对象。所以代码就是完整的。

对于具体问题

无关,请注意,Mojarra 2.2.5+中缺少的<f:ajax>验证将在issue 1372之后再次出现。这对许多先发者来说很困惑。