我有以下用例:我在屏幕上有一个按钮,它会重新呈现其他元素。
<h:commandButton value="button">
<f:ajax execute="@this" render="toBeRendered" />
</h:commandButton>
......
<h:outputPanel id="toBeRendered"/>
我的问题是这个其他元素(toBeRendered)并不总是存在,因为它位于页面上的ui组合中,因此JSF在构建视图时失败并且无法在render属性中找到该元素。 f:ajax标签。我知道在较新版本的mojarra中不再存在此验证,但更新不是一种选择。是否有人有一个解决方法,只有在其他元素存在时才会呈现?
答案 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之后再次出现。这对许多先发者来说很困惑。