当列是动态的并且显示为地图列表时,我遇到了进行即时选择的问题:
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;
}
}
提前致谢。
答案 0 :(得分: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>