我在ViewScope下有一个托管bean。它里面有一个实例变量。
MetaData对象有一个inputItem对象List。
@ManagedBean
@ViewScoped
public class ConBean implements Serializable {
private MetaData metadata;
@PostConstruct
@SuppressWarnings("unchecked")
public void init() throws IOException {
this.metadata = new MetaData ();
}
public void proc(){
List<InputItem> inputs= new ArrayList<InputItem>();
inputs.add(***** code to populate the inputItem List);
//after populating, inputs added to the metadata
metadata.setInputs(inputs);
}
//getters & setters
}
在我的JSF中,输入列表填充在UI重复内部。
<div id="inputplaceholder">
<ui:repeat value="#{conBean.metaData.inputs}" var="content">
</ui:repeat>
</div>
使用richfaces民意调查定期更新div inputplaceholder。
<a4j:poll id="poll" interval="12000" action="#{conBean.proc}"
execute="@form" render="inputplaceholder"/>
我遇到的问题是即使在proc()方法内正确地将inputItem设置为metaData对象,当呈现/部分更新视图时,它也不会在UI中突出显示。所以部分更新不起作用。我试过移动
this.metadata = new MetaData(); 在proc方法中但没有运气。
任何想法和帮助都受到高度赞赏。
谢谢......
答案 0 :(得分:1)
部分渲染真的发生了吗?这是不可能的。没有ID为inputplaceholder
的JSF组件。您已将其分配给纯HTML <div>
元素。用一个完整的JSF组件替换它:
<h:panelGroup layout="block" id="inputplaceholder">
此外,由于您在render
属性中使用了相对ID,因此它只会扫描同一父命名容器组件中的组件。 <ui:repeat>
就是这样的,但具有所需ID的组件放在外面它。您想要使用绝对ID。假设它位于具有固定ID的<h:form>
内:
<h:form id="myform">
<h:panelGroup layout="block" id="inputplaceholder">
...
然后您应该在render
属性中引用它,如下所示
render=":myform:inputplaceholder"