Jsf 如何部分拆分Primefaces数据表的每一行?

Jsf 如何部分拆分Primefaces数据表的每一行?,jsf,primefaces,primefaces-datatable,Jsf,Primefaces,Primefaces Datatable,我的问题如下: 我有一个datatable,其中包含类Producto的列表,它内部由几个简单类型的字段和两个proveder类型的对象组成Categoria和tipoproveredor是枚举 public class Producto { private int idProducto; private String nombre; private Categoria categoria; private Proveedor proveedorUno;

我的问题如下:

我有一个datatable,其中包含类
Producto
的列表,它内部由几个简单类型的字段和两个
proveder
类型的对象组成
Categoria
tipoproveredor
是枚举

public class Producto {
    
    private int idProducto;
    private String nombre;
    private Categoria categoria;
    private Proveedor proveedorUno;
    private Proveedor proveedorDos;
    
}


public class Proveedor {

    private int idProveedor;
    private TipoProveedor tipoProveedor;
    private String nombre;
    private BigDecimal precio;
    
}
我的问题是,在datatable的每一行中,必须显示所有信息,这样,如果一个已填充的提供程序出现,它将正常显示,但如果两个填充都出现,则提供程序信息的一部分将分为两行。例如:

|------------------------------------------------------------------|
| Nombre | Categoria | idProveedor | Nombre Proveedor    | Precio  |
|------------------------------------------------------------------|
| DIN-A4 | Papel     | 10256       | Proveedor Manolito  | 10.59 € |
|        |           | 24747       | Proveedor Fulanito  | 10.75 € |
|------------------------------------------------------------------|
| DIN-A5 | Papel     | 10256       | Proveedor Menganito | 4.77 €  |
|------------------------------------------------------------------|
| DIN-A3 | Papel     | 44787       | Proveedor Saturnino | 14.77 € |
|------------------------------------------------------------------|
|------------------------------------------------------------------|
| Nombre | Categoria | idProveedor | Nombre Proveedor    | precio  |
|------------------------------------------------------------------|
| DIN-A4 | Papel     | 10256       | Proveedor Manolito  | 10.59 € |
|        |           | 24747       | Proveedor Fulanito  | 10.75 € |
|------------------------------------------------------------------|
| DIN-A5 | Papel     | 10256       | Proveedor Menganito | 4.77 €  |
|        |           |             |                     |         |
|------------------------------------------------------------------|
| DIN-A3 | Papel     | 44787       | Proveedor Saturnino | 14.77 € |
|        |           |             |                     |         |
|------------------------------------------------------------------|
我曾尝试使用这样的数据表,但它看起来并不完全符合我的需要:

<p:dataTable id="listadoProductos" widgetVar="listadoProductos" 
        value="#{listadoProductosBean.listadoProductos}" var="producto"
        emptyMessage="#{messages['tabla.VACIA']}">
        
        <p:column headerText="#{messages['listado.NOMBRE']}">
            <h:outputText value="#{producto.nombre}" />
        </p:column>
        <p:column headerText="#{messages['listado.CATEGORIA']}">
            <h:outputText value="#{producto.categoria.desc}" />
        </p:column>
        <p:column headerText="#{messages['listado.ID_PROVEEDOR']}" 
            rendered="#{producto.proveedorUno != null && producto.proveedorDos != null}">
            <p:panelGrid columns="1">
                <p:row>
                    <h:outputText value="#{producto.proveedorUno.idProveedor}" />
                </p:row>
                <p:row>
                    <h:outputText value="#{producto.proveedorDos.idProveedor}" />
                </p:row>
            </p:panelGrid>
            
        </p:column>
        <p:column headerText="#{messages['listado.ID_PROVEEDOR']}" 
            rendered="#{producto.proveedorUno != null && producto.proveedorDos == null}">
            <p:panelGrid columns="1">
                <p:row>
                    <h:outputText value="#{producto.proveedorUno.idProveedor}" />
                </p:row>
            </p:panelGrid>
            
        </p:column>
        <p:column headerText="#{messages['listado.ID_PROVEEDOR']}" 
            rendered="#{producto.proveedorUno == null && producto.proveedorDos != null}">
            <p:panelGrid columns="1">
                <p:row>
                    <h:outputText value="#{producto.proveedorDos.idProveedor}" />
                </p:row>
            </p:panelGrid>
            
        </p:column>
        
    </p:dataTable>

您可以对要分组的列使用
groupRow
属性,因此:

<p:column headerText="#{messages['listado.NOMBRE']}" groupRow="true">
    <h:outputText value="#{producto.nombre}" />
</p:column>
<p:column headerText="#{messages['listado.ID_PROVEEDOR']}">
    <h:outputText value="#{producto.proveedorUno.idProveedor}" />
</p:column>

见:

  • (第行)
要使用固定的行高,请为表指定一个
styleClass
,并使用CSS将表格单元格设置为
min height

见:


不,这不是我要找的。我不需要按列分组。我需要的是将每个记录的一行部分地分成两行。不一样。那么,您只需要一个CSS规则,带有
空白:nowrap
和一些

标记,对吗?同意。停止将其视为“拆分行”您需要为表示数据的1行返回一个对象,然后在单元格中按@JasperdeVries所述操作,并使用
空白:nowrap

标记使具有1个以上值的列以这种方式显示