【问题标题】:h:dataTable composite component, cc.attrs.var, IllegalArgumentExceptionh:dataTable 复合组件,cc.attrs.var,IllegalArgumentException
【发布时间】:2016-08-02 00:57:42
【问题描述】:

我正在尝试创建自己的数据表,就像 primefaces 一样。问题是cc.attrs.var 在使用时会抛出 IllegalArgumentException。所以我想知道如何才能拥有像 Primefaces 这样的 var 属性。

<cc:interface>
    <cc:attribute name="value"/>
    <cc:attribute name="var"/>
    <cc:attribute name="styleClass"/>
</cc:interface>

<cc:implementation>

    <div>Previous</div>
    <div>Next</div>

    <h:dataTable value="#{cc.attrs.value}" var="#{cc.attrs.var}" styleClass="#{cc.attrs.styleClass}">
        <ui:insert/>
    </h:dataTable>

</cc:implementation>

【问题讨论】:

    标签: jsf datatable composite-component


    【解决方案1】:

    根据UIData#setValueExpression() javadoc,var 属性中不允许有 EL 表达式。

    抛出: IllegalArgumentException - 如果名称是 idparentvarrowIndex 之一

    最好的办法是创建一个支持组件,您可以在其中手动评估并设置UIData 组件的var 属性,并在postAddToView 事件期间将绑定到&lt;h:dataTable&gt;

    <cc:interface componentType="yourTableComposite">
        <cc:attribute name="value" />
        <cc:attribute name="var" />
    </cc:interface>
    <cc:implementation>
        <f:event type="postAddToView" listener="#{cc.init}" />
    
        <h:dataTable binding="#{cc.table}" value="#{cc.attrs.value}">
            <cc:insertChildren />
        </h:dataTable>
    </cc:implementation>
    

    @FacesComponent("yourTableComposite")
    public class YourTableComposite extends UINamingContainer {
    
        private UIData table;
    
        public void init() {
            table.setVar((String) getAttributes().get("var"));
        }
    
        public UIData getTable() {
            return table;
        }
    
        public void setTable(UIData table) {
            this.table = table;
        }
    
    }
    

    请注意,我将 &lt;ui:insert&gt; 固定为 &lt;cc:insertChildren&gt;&lt;ui:insert&gt; 只能用于&lt;ui:composition&gt;/&lt;ui:decorate&gt;

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-27
      • 2011-06-10
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      相关资源
      最近更新 更多