0

当列是动态的并显示为地图列表时,我在进行即时选择时遇到了问题:

private List<Map<String,DataWindowField>> columns;

现在它是如何工作的:我有一个从 ViewedScoped bean 调用的类:

public class DataWindow extends Utility
{

private static final long serialVersionUID = 1L;
private TransactionObject transObject;
public Main main; 
private String sqlStatement; 

private List<Map<String,DataWindowField>> columns;
private List<DataWindowHeader> headers;
    public List<Map<String,DataWindowField>> getColumns() {
    return columns;
}
public void setColumns(List<Map<String,DataWindowField>> columns) {
    this.columns = columns;
}

public List<DataWindowHeader> getHeaders() {
    return headers;
}

public List<DataWindowHeader> getVisibleHeaders() {
    List<DataWindowHeader> visibleHeaders=new ArrayList<DataWindowHeader>();

    for(DataWindowHeader header:headers)
    {
        if(header.isVisible()==true)
        {
            visibleHeaders.add(header);
        }
    }
    return visibleHeaders;

}
public void setHeaders(List<DataWindowHeader> headers) {
    this.headers = headers;
}
}

此类的 Xhtml 文件如下所示:

<p:dataTable id="dw_favorites_detail" var="column" value="#{dw.columns}" scrollable="false">                      
        <p:columns var="column_header" value="#{dw.getVisibleHeaders()}">
            #{column[column_header.dbAlias].value}  
        </p:columns>  

    </p:dataTable>

我需要这样的构造,因为整个列的可见性可以在执行期间更改。

我的问题是如何为这些行创建 DataModel 以进行即时选择?

我当前的模型还没有完成,因为我不知道如何将选定的行与 Map 对应:

public class DataWindowRowModel extends ListDataModel<Map<String,DataWindowColumn>> implements SelectableDataModel<Map<String,DataWindowColumn>> {


@Override
public Map<String,DataWindowColumn> getRowData(String arg0) {
    List<Map<String,DataWindowColumn>> columns=(List<Map<String,DataWindowColumn>>) getWrappedData();
    for(Map<String,DataWindowColumn> column:columns)
    {

    }
    return null;
}

@Override
public Object getRowKey(Map<String,DataWindowColumn> rowdata) {

     return rowdata;  

}

} 

提前致谢。

4

1 回答 1

0

我已经用下一种方式纠正了这个问题,它很好地选择了列:

public class DataWindowRowModel extends ListDataModel<Map<String,DataWindowField>> implements SelectableDataModel<Map<String,DataWindowField>> {

 public DataWindowRowModel() {  
    }  

public DataWindowRowModel(List<Map<String,DataWindowField>> columns)
{

    super(columns); 
}
@Override
public Map<String,DataWindowField> getRowData(String rowKey) {
    Map<String,DataWindowField> currentRowMap=new HashMap<String,DataWindowField>();
    List<Map<String,DataWindowField>> row=(List<Map<String,DataWindowField>>) getWrappedData();
    for(Map<String,DataWindowField> column:row)
    {
        for(DataWindowField value:column.values())
        {
            if(value.getValue().equals(rowKey));
            return column;
        }
    }
    return null;
}

@Override
public Object getRowKey(Map<String,DataWindowField> rowdata) {
    for(DataWindowField value:rowdata.values())
    {
        return value.getValue();

    }

    return null;
}

}

和 xhtml 文件:

<p:dataTable id="dw_favorites_detail" var="column" value="#{dw.rowModel}" selection="#{dw.row}" scrollable="false" selectionMode="single">
        <p:ajax event="rowSelect" listener="#{dw.onRowSelect}"/>                      
        <p:columns var="column_header" value="#{dw.getVisibleHeaders()}" width="20%">
            #{column[column_header.dbAlias].value}  
        </p:columns>  

    </p:dataTable>  
于 2013-11-06T12:33:29.140 回答