JSF 2.0:在ui中重新渲染/更新单个项目:使用AJAX重复

时间:2011-01-11 16:46:21

标签: ajax jsf jsf-2 repeat

我的页面由几个区域组成,这些区域是使用<ui:repeat>迭代项目列表而创建的。想象一下这个简化的例子:

<h:form id="form">    
    <ui:repeat id="repeatContainer" var="item" value="#{testBean.items}" varStatus="status">
        <h:outputText value="#{item.title}: "/>

        <!-- I want to re-render only a single one of these fields -->
        <h:outputText id="valueContainer" value="#{item.value}"/><br/>          
    </ui:repeat>
</h:form>

现在,我想使用AJAX 重新渲染(仅)此列表中特定元素valueContainer (例如,带索引的元素) 1)。我已经尝试了所有这些组合而没有任何运气:

<!-- Works, but renders all items: -->
<f:ajax render=":form"/>

<!-- This is what I actually want to achieve (does not work, comp. not found): -->
<f:ajax render=":form:repeatContainer:1:valueContainer"/>

<!-- Does not work (component not found): -->
<f:ajax render=":form:repeatContainer"/>

<!-- Does not work (component not found): -->
<f:ajax render=":form:repeatContainer:1"/>

<!-- Does not work (component not found): -->
<f:ajax render=":form:1"/>

<!-- Does not work (component not found): -->
<f:ajax render=":form:1:valueContainer"/>

<!-- Does not work (no error message, but does nothing): -->
<f:ajax render=":form:repeatContainer:valueContainer"/>

我的要求包括:

  • 我需要识别组件 使用绝对标识符重新渲染 路径,因为那个按钮 触发更新是在某个地方 组件完全不同 树。
  • 重新渲染整个页面或 表单(使用@all / @form)是 对我没用,因为那种 质疑为什么我使用JSF / AJAX 根本......
  • 我需要使用PrimeFaces <p:dataGrid>单元格来实现相同的功能(即仅更新特定单元格的特定子组件),但我认为这会减少到相同的问题。

我想我必须有一个简单的解决方案,我目前正在忽视它!!

2 个答案:

答案 0 :(得分:0)

这似乎是由Mojarra 2.0.2中的两个独立错误引起的。以下主题讨论了相关问题: How to refer to dataTable parent within the dataTable?

在我的情况下,我使用PrimeFaces <p:dataGrid>而不是<h:dataTable>,但它似乎遭受相同的症状。引用失败了。我想这与UIComponent#findComponent()中的错误或JSF实现的基础方法有关。

目前似乎没有解决此问题的方法......除了等待修复JSF实现...如果其他人有进一步的建议,请随时添加它们。

答案 1 :(得分:0)

可以通过将表单放在主面p:outputPanel并将autoUpdate设置为true来解决问题