JSF ui:在ui中重复:使用动态分配的var值重复

时间:2014-10-13 09:45:57

标签: jsf parameter-passing repeat composite-component uirepeat

我们为项目创建了一个JSF表组件,它使用<ui:repeat>来创建表。在表中添加表的新要求(第二个表位于一行并且可以折叠)使我们遇到麻烦,因为<ui:repeat var="row" ...>在表componenten中静态设置,而内部表使用行变量迭代列表时的外表。现在我要创建的是这样的:

<div>
   <myfw:mytable dataModel="#{bean.user}" varName="user" ...>
      <myfw:mycolumn value="#{user.name}"/>
      <myfw:myexpendablecolumn>
         <myfw:mytable dataModel="#{bean.acl}" varName="acl" ...>
            <myfw:mycolumn value="#{acl.name}"/>    
         </myfw:mytable>
      </myfw:myexpendablecolumn>
   </myfw:mytable>
</div>

在表组件中,应设置var属性...

<composite:interface>
...
    <composite:attribute name="varName" required="false"
        type="java.lang.String" default="row" />
</composite:interface>

<composite:implementation>
...

        <ui:repeat var="#{varName}" value="#{cc.attrs.dataModel.wrappedData}"
            varStatus="loop">
            <div class="floating_table_row">
                              <composite:insertChildren />  
            </div>
        </ui:repeat>
</composite:implementation>

......但遗憾的是,这不起作用。我已经用<c:forEach>尝试了它,但结果是一样的,列的值是空的,没有显示数据。有没有办法动态设置<ui:repeat>

的var属性

1 个答案:

答案 0 :(得分:1)

经过进一步研究后,我偶然发现了这个页面https://java.net/jira/browse/FACELETS-372,其中UIRepeat类,特别是getVar方法被修改为访问ValueExpression,而不是

public String getVar() {
    return this.var;
}

......方法如下:

public String getVar() {
    if (this.var != null) {
        return this.var;
    }
    ValueExpression ve = this.getValueExpression("var");
    if (ve != null) {
        return (String) ve.getValue(getFacesContext().getELContext());
    }
    return null;
}

来自https://java.net/jira/browse/FACELETS-372的附件有进一步修改。遗憾的是,UIRepeat类不能简单地扩展,因为在私有方法中使用了var属性,所以我现在有一个<myfw:repeat>,它利用了来自的UIRepeat类。页。