仅当元素存在时 Ajax 渲染

标签 ajax jsf jsf-2

我有以下用例:我在屏幕上有一个按钮,可以重新渲染其他元素。

<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/

相关文章:

jsf - 使用相同的 JMeter 测试脚本在多个服务器上测试 JSF 应用程序

twitter-bootstrap - 在 JSF 中使用 Primefaces 和 Bootstrap

javascript - 在页面加载时检索元素的值以用于 JQuery 函数

javascript - Ajax 请求加载时间过长

Google 访问的 Ajax Url

jsf - 在不丢失当前 JSF 页面的 View 范围的情况下在新选项卡/窗口中打开链接

javascript - 如何在ajax中发送额外的表单数据

validation - o :viewParamValidationFailed 中区分转换失败和验证失败

java - 如何访问jsf数据表中的Map键

jsf-2 - 设置ui :param conditionally