【问题标题】:Dynamically created Div did not get updated after calling rerender event调用重新渲染事件后动态创建的 Div 没有得到更新
【发布时间】:2013-03-02 16:51:52
【问题描述】:
我正在使用 RichFaces 3.3.x 和 Tomahawk。我有一个在 onkeyup 上有 a4j:support 的输入字段,我正在使用“进程”来更新支持 bean。之后,我使用“reRender”来获取我的支持 bean(新)创建的 div。不幸的是,会话范围 bean 创建的 Div 的 getter 没有被调用!我该怎么办?
<t:inputText id="searchString"
value="#{beans.searchString}"
onkeydown="if (event.keyCode == 13) { return false; }">
<a4j:support event="onkeyup" requestDelay="200" ajaxSingle="true"
reRender="resultsDiv" eventsQueue="quicksearchqueue"
ignoreDupResponses="true"
process="searchString"
/>
</t:inputText>
<t:div id="results" binding="#{bean.resultsDiv}" />
【问题讨论】:
标签:
jsf
richfaces
tomahawk
rerender
【解决方案1】:
首先,您在 a4j:support 中放入 reRender 的 id 是“resultsDiv”,它不同于 .
如果这不是问题的根源,请尝试将要在 ajax 中更新的区域放在 ajax 呈现的 outputPanel 中,例如:
<a4j:outputPanel id="resultsDiv" ajaxRendered="true" >
<t:div id="results" binding="#{bean.resultsDiv}" />
</a4j:outputPanel>
当然在 a4j 的 reRender 值中使用 outputPanel 的 id:support
【解决方案2】:
除了上面代码中的错误ID,我遇到了同样的问题。我使用 rich:tree 和 reRender 属性来重新渲染动态生成的 div 组件。它根本不起作用。如果你使用 rich:panel 而不是 div 组件,它会正常工作:
<t:inputText id="searchString"
value="#{beans.searchString}"
onkeydown="if (event.keyCode == 13) { return false; }">
<a4j:support event="onkeyup" requestDelay="200" ajaxSingle="true"
reRender="results" eventsQueue="quicksearchqueue"
ignoreDupResponses="true"
process="searchString"
/>
</t:inputText>
<rich:panel id="results" binding="#{bean.yourPanel}" />
在 backing bean 中,您将生成的 div 作为子组件放入富面板组件,如下所示:
yourPanel.getChildren().add(yourGeneratedDiv);
我不知道为什么它不能与 t:div 组件一起使用。对此的任何回答将不胜感激。