datatable java排序,JSF数据表(h:dataTable)DataModel排序数据
JSF中有一个叫作DataTable的控件,可用来渲染和格式化html表格。使用DataTable,我们可以迭代收集或数组数组来显示数据。下面我们来学习如何向DataTable使用DataModel排序数据。
要使用DataTable,我们需要添加以下HTML头。
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
以下JSF标签 -
styleClass="employeeTable"
headerClass="employeeTableHeader"
rowClasses="employeeTableOddRow,employeeTableEvenRow">
Name
#{employee.name}
Department
#{employee.department}
Age
#{employee.age}
Salary
#{employee.salary}
被渲染成以下HTML标签。
NameDepartmentAgeSalary
TomMarketing102000.0RobertMarketing151000.0
JSF数据表更新行数据实例
打开 NetBeans IDE 创建一个Web工程:DataTableSortDataModel,其目录结构如下所示 -
创建以下文件代码,文件:index.xhtml 的代码内容如下所示 -
/p>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
JSF 2 dataTable sorting example
styleClass="book-table"
headerClass="book-table-header"
rowClasses="book-table-odd-row,book-table-even-row">
Book No
#{o.bookNo}
Product Name
#{o.productName}
Price
#{o.price}
Quantity
#{o.qty}
文件:User.java 的代码内容如下所示 -
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.yiibai;
/**
*
* @author Maxsu
*/
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Comparator;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ArrayDataModel;
import javax.faces.model.DataModel;
import java.util.Arrays;
import java.util.Comparator;
import javax.faces.model.DataModel;
@ManagedBean(name = "book")
@SessionScoped
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private SortableDataModel sotableDataModel;
private boolean sortAscending = true;
private static final Book[] bookList = {
new Book("1", "CSS", new BigDecimal("1500.00"), 3),
new Book("2", "HTML", new BigDecimal("421.00"), 6),
new Book("3", "Java", new BigDecimal("5222.00"), 10),
new Book("4", "Javascript", new BigDecimal("1111.00"), 9),
new Book("5", "SQL", new BigDecimal("211.00"), 20)
};
public User() {
sotableDataModel = new SortableDataModel(new ArrayDataModel(bookList));
}
public DataModel getBookList() {
return sotableDataModel;
}
//sort by book no
public String sortByBookNo() {
if (sortAscending) {
sotableDataModel.sortBy(new Comparator() {
@Override
public int compare(Book o1, Book o2) {
return o1.getBookNo().compareTo(o2.getBookNo());
}
});
sortAscending = false;
} else {
//descending book
sotableDataModel.sortBy(new Comparator() {
@Override
public int compare(Book o1, Book o2) {
return o2.getBookNo().compareTo(o1.getBookNo());
}
});
sortAscending = true;
}
return null;
}
public static class Book {
String bookNo;
String productName;
BigDecimal price;
int qty;
public Book(String bookNo, String productName,
BigDecimal price, int qty) {
this.bookNo = bookNo;
this.productName = productName;
this.price = price;
this.qty = qty;
}
public String getBookNo() {
return bookNo;
}
public void setBookNo(String bookNo) {
this.bookNo = bookNo;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public int getQty() {
return qty;
}
public void setQty(int qty) {
this.qty = qty;
}
}
}
class SortableDataModel extends DataModel {
DataModel model;
private Integer[] rows;
SortableDataModel(DataModel model) {
this.model = model;
initRows();
}
public void initRows() {
int rowCount = model.getRowCount();
if (rowCount != -1) {
this.rows = new Integer[rowCount];
for (int i = 0; i < rowCount; ++i) {
rows[i] = i;
}
}
}
public void sortBy(final Comparator comparator) {
Comparator rowComp = new Comparator() {
public int compare(Integer i1, Integer i2) {
E o1 = getData(i1);
E o2 = getData(i2);
return comparator.compare(o1, o2);
}
};
Arrays.sort(rows, rowComp);
}
private E getData(int row) {
int originalRowIndex = model.getRowIndex();
model.setRowIndex(row);
E newRowData = model.getRowData();
model.setRowIndex(originalRowIndex);
return newRowData;
}
@Override
public void setRowIndex(int rowIndex) {
if (0 <= rowIndex && rowIndex < rows.length) {
model.setRowIndex(rows[rowIndex]);
} else {
model.setRowIndex(rowIndex);
}
}
@Override
public boolean isRowAvailable() {
return model.isRowAvailable();
}
@Override
public int getRowCount() {
return model.getRowCount();
}
@Override
public E getRowData() {
return model.getRowData();
}
@Override
public int getRowIndex() {
return model.getRowIndex();
}
@Override
public Object getWrappedData() {
return model.getWrappedData();
}
@Override
public void setWrappedData(Object data) {
model.setWrappedData(data);
initRows();
}
}
文件:table-style.css 的代码内容如下所示 -
.book-table-header{
bbook-bottom:1px solid #BBB;
padding:16px;
}
.book-table-odd-row{
bbook-top:1px solid #BBB;
}
.book-table-even-row{
bbook-top:1px solid #BBB;
}
右键运行工程:DataTableSortDataModel,如果没有任何错误,打开浏览器访问:
http://localhost:8084/DataTableSortDataModel/
应该会看到以下结果 -
在上图中,您可以点击”Book No“,就可以看到排序情况了。
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
datatable java排序,JSF数据表(h:dataTable)DataModel排序数据相关推荐
- java jsf table_JSF数据表(h:dataTable)排序数据
JSF中有一个叫作DataTable的控件,可用来渲染和格式化html表格.使用DataTable,我们可以迭代收集或数组数组来显示数据.下面我们来学习如何向DataTable排序数据. 要使用Dat ...
- JSF标签之数据表h:dataTable
以下代码可以在我的资源中下载 JavaServer Faces核心编程(第3版)源码 @ManagedBean @SessionScoped public class TableData {priva ...
- mysql数据库视图重命名_数据表和视图:修改数据表
在MySQL中,ALTER 语句用来修改数据表名称或者数据表字段名称.也可以用来添加或者删除数据表字段. ALTER 语句经常和"ADD", "DROP" an ...
- navicat mysql 建表语句_Navicat for MySQL怎么/如何创建数据表?Navicat for MySQL创建数据表教程_斗蟹游戏网...
[斗蟹攻略]Navicat for MySQL是针对MySQL数据库管理而研发的管理工具,创建数据表是其最基本操作,下面就由斗蟹小编介绍Navicat for MySQL创建数据表的方法. Navic ...
- mysql 字段写入_MySQL为数据表的指定字段插入数据
username not null 没有默认值/有默认值 insert不插入username字段 均不报错 2014年07月23日21:05 百科369 MySQL为数据表的指定字段插入数据 ...
- JavaWeb项目监听数据表变化并通知前台(数据来源于自身)
最近公司有些项目中需要java程序去监听数据表,当数据有变化时把新数据通知前台并且展示出来.本人也去百度上查询了好多相关知识(本意是有现成抄的就直接抄,哈哈,但无奈没有),然后根据自己的理解写了个de ...
- pythonpandas用sql查询数据表_pandas从数据库读取数据
因为本周有一个是需要使用pandos做一个数据分析的需求,所以在这里做一下记录. Python中用Pandas进行数据分析,最常用的就是Dataframe数据结构, 这里我们主要介绍Pandas如何读 ...
- DataGrip 2019.2.5 —— MySQL数据表迁移到SQL Server数据表解决方案
问题描述 DataGrip 2019.2.5中导出的MySQL数据库的数据表不能直接迁移到SQL Server数据库的数据表. 系统环境 DataGrip 2019.2.5 MySQL 8.0 SQL ...
- myisam数据表根据frm文件恢复数据表
有时,我们重装mysql时,可能忘记备份数据了, 只留下了之前的mysql下面的data文件夹里的数据, 这时我们应该如何去恢复数据表呢 如果直接将原来的data目录导进现在的mysql,肯定是不行的 ...
最新文章
- 微服务化的数据库设计与读写分离
- 关于Github(1)
- java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)
- layui根据name获取对象_JavaScript对象 - 初识
- 斯坦福CS231n项目实战(二):线性支持向量机SVM
- python idea控制台中文乱码_python 解决cv2绘制中文乱码问题
- (*长期更新)软考网络工程师学习笔记——Section 2 数字传输系统
- 读入自然数m、n,判断m/n是有限小数还是循环小数
- 实验 4 [bx]和 loop 的使用
- java 重构 if else_项目中的if else太多了,该怎么重构?
- 经典面试题(30):以下代码将输出的结果是什么?
- java 命令 native2ascii_java native2ascii.exe命令
- python零基础能学吗-python零基础能学吗
- 《项目百态》读感系列”玩的就是心跳“
- 操作系统原理与Linux实践教程申丰山版习题2的2-3答案
- 【Jenkins】windows系统下Jenkins的下载、安装与启动
- 在odl中如何实现rpc
- Python与企业微信-3
- 装了svn桌面右键没有_右键菜单没有svn选项怎么办|win7 svn没有右键菜单怎么解决|svn添加到右键菜单方法...
- pytorch super 的用法
热门文章
- linux 卸载、安装mysql
- 关于Patter类和Match类
- 第四篇: UpdatePanel 控件--触发机制Triggers
- Google Perf Tools安装以及使用
- 微型计算机系统的主存储器,微型计算机系统中 ,操作系统保存在硬盘上,其主存储器应该采用 ( )...
- python输出运行时间_分析python程序运行时间的几种方法
- integer为null_走进 JDK 之 Integer
- 5.Struts2配置形式,覆盖
- U盘安装Linux安装报错及解决方案
- 对PostgreSQL中bgwriter的 MyProc 的理解