我有以下使用情况:我在屏幕上有一个按钮,它呈现另一个元素。
<h:commandButton value="button">
<f:ajax execute="@this" render="toBeRendered" />
</h:commandButton>
......
<h:outputPanel id="toBeRendered"/>
我的问题是,这另一个元素(toBeRendered)并不总是存在,因为它是在页面上的ui组成,所以JSF失败时,它构建视图,不能找到元素的呈现属性的f:ajax标签。我知道新版本的mojarra不再有这个验证,但更新不是一个选项。有没有人有一个解决方案,使它只渲染当其他元素存在?
使用UIComponent#findComponent()
找到它,然后打印它的ID。如果找不到,那么无论如何都要考虑null
。
<h:commandButton ...>
<f:ajax ... render="#{component.findComponent('toBeRendered').id}" />
</h:commandButton>
...
<h:panelGroup id="toBeRendered" />
注意#{component}
是一个隐式EL对象,引用当前的UIComponent
实例。因此,代码是完整的。
与具体问题无关,应该注意的是Mojarra 2.2.5+中缺失的<f:ajax>
验证将在稍后的issue 1372中返回。