JSF viewcope值未正确显示在视图中

时间:2011-06-28 14:06:07

标签: jsf jsf-2 richfaces ajax4jsf

我在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方法中但没有运气。

任何想法和帮助都受到高度赞赏。

谢谢......

1 个答案:

答案 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"