JSF UI:重复的用户界面:与动态分配的VAR值的重复(JSF ui:repeat in ui:r

2019-09-28 14:28发布

我们创建了一个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>但结果是相同的,该列的值是空的,没有数据被示出。 有没有办法动态设置的VAR attribut <ui:repeat>

Answer 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从Page类。



文章来源: JSF ui:repeat in ui:repeat with dynamically assigned var-value