JSF通过包含来自另一个页面的额外列来扩展基本数据表

JSF通过包含来自另一个页面的额外列来扩展基本数据表,jsf,Jsf,我有一个包含20列的基本数据表,所有报告都使用它……有些报告添加了额外的列,有没有办法将额外列的代码放在单独的JSF页面中,并以某种方式引用它 e、 g datatable.jsp <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <h:dataTable value="#{tab

我有一个包含20列的基本数据表,所有报告都使用它……有些报告添加了额外的列,有没有办法将额外列的代码放在单独的JSF页面中,并以某种方式引用它

e、 g

datatable.jsp

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<h:dataTable value="#{table}" var="item" styleClass="report-table">
    <f:subview id="tb1">
        <jsp:include page="/jsp/include.jsp" />
    </f:subview>
</h:dataTable>


include.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>


<t:column >
        <f:facet name="header">
                <h:outputText value="User" />
        </f:facet>
        <h:outputText value="MyUser"></h:outputText>
</t:column>

include.jsp

不,这是不可能的。最好的选择是
h:column
组件的
rendered
属性。如果计算结果为
true
,则将显示相关列。例如:

<h:dataTable value="#{bean.list}" var="item">
    <h:column>
        This is always displayed.
    </h:column>
    <h:column rendered="#{bean.additionalColumnRequired}">
        This is only displayed when additionalColumnRequired == true.
    </h:column>
    <h:column rendered="#{!bean.additionalColumnRequired}">
        This is only displayed when additionalColumnRequired == false.
    </h:column>
</h:dataTable>
但是,您可以将任何类型的布尔表达式放入
rendered
属性中

<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue > 10}" />
<h:someComponent rendered="#{bean.objectValue == null}" />
<h:someComponent rendered="#{bean.stringValue != 'someValue'}" />
<h:someComponent rendered="#{!empty bean.collectionValue}" />
<h:someComponent rendered="#{!bean.booleanValue && bean.intValue != 0}" />
<h:someComponent rendered="#{bean.stringValue == 'oneValue' || bean.stringValue == 'anotherValue'}" />

不,这是不可能的。最好的选择是
h:column
组件的
rendered
属性。如果计算结果为
true
,则将显示相关列。例如:

<h:dataTable value="#{bean.list}" var="item">
    <h:column>
        This is always displayed.
    </h:column>
    <h:column rendered="#{bean.additionalColumnRequired}">
        This is only displayed when additionalColumnRequired == true.
    </h:column>
    <h:column rendered="#{!bean.additionalColumnRequired}">
        This is only displayed when additionalColumnRequired == false.
    </h:column>
</h:dataTable>
但是,您可以将任何类型的布尔表达式放入
rendered
属性中

<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue > 10}" />
<h:someComponent rendered="#{bean.objectValue == null}" />
<h:someComponent rendered="#{bean.stringValue != 'someValue'}" />
<h:someComponent rendered="#{!empty bean.collectionValue}" />
<h:someComponent rendered="#{!bean.booleanValue && bean.intValue != 0}" />
<h:someComponent rendered="#{bean.stringValue == 'oneValue' || bean.stringValue == 'anotherValue'}" />