使用JSF中的动态列进行即时选择(Instant selection with dynamic columns in JSF)

编程入门 行业动态 更新时间:2024-10-24 15:13:25
使用JSF中的动态列进行即时选择(Instant selection with dynamic columns in JSF)

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

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; } }

提前致谢。

I have the problem with making Instant Selection when columns is dynamic and presented as List of Maps:

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

How it works now: I have a class that called from 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 file for this class is looks like here:

<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>

I need such construction because visibility of the entire column can be changed during execution.

And my question is How to create DataModel for such rows to make Instant selection?

My current model is not finished because I don't know how to correspond selected row with 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; } }

Thanks in advance.

最满意答案

我已经通过下一个方式纠正了这个问题并且它选择了列:

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>

I have corrected this in next way and it select columns well:

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; }

}

And xhtml file:

<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>

更多推荐

本文发布于:2023-08-02 10:44:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1375440.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:动态   Instant   JSF   columns   dynamic

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!