我的页面由几个区域组成,这些区域是使用<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
根本...... <p:dataGrid>
单元格来实现相同的功能(即仅更新特定单元格的特定子组件),但我认为这会减少到相同的问题。我想我必须有一个简单的解决方案,我目前正在忽视它!!
答案 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来解决问题