我有以下用例:我在屏幕上有一个按钮,可以重新渲染其他元素。
<h:commandButton value="button">
<f:ajax execute="@this" render="toBeRendered" />
</h:commandButton>
......
<h:outputPanel id="toBeRendered"/>
我的问题是,这个其他元素 (toBeRendered) 并不总是存在,因为它位于页面上的 ui 组合内,因此 JSF 在构建 View 时会失败,并且无法找到 f 的 render 属性中的元素:ajax 标签。我知道在较新版本的 mojarra 中不再存在此验证,但更新不是一个选项。有没有人有一个解决方法,以便它仅在其他元素存在时才会呈现?
最佳答案
使用 UIComponent#findComponent()
找到它,然后打印它的 ID。如果找不到,则null
无论如何都会考虑。
<h:commandButton ...>
<f:ajax ... render="#{component.findComponent('toBeRendered').id}" />
</h:commandButton>
...
<h:panelGroup id="toBeRendered" />
请注意#{component}
是一个隐式 EL 对象,引用当前 UIComponent
实例。所以代码按原样完整。
与具体问题无关,应注意的是缺少的 <f:ajax>
Mojarra 2.2.5+ 中的验证将稍后按照 issue 1372 返回。这让许多初学者感到困惑。
关于仅当元素存在时 Ajax 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31812018/