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>

実行中に列全体の可視性が変更される可能性があるため、このような構造が必要です。

そして私の質問は、そのような行のデータモデルを作成してインスタント選択を行う方法は?

選択した行をマップに対応させる方法がわからないため、現在のモデルは完成していません。

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