在JSF

2013-11-04 61 views
0

動態列即時選擇我有使即時選擇的問題,當列是動態的,表現爲地圖列表:在JSF

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

它是如何工作現在: 我有一個類,從ViewedScoped叫豆:

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以進行即時選擇?

我目前的模式還沒有完成,因爲我不知道該如何選擇對應一行地圖:提前

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; 

} 

} 

感謝。

回答

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>