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排序数据相关推荐

  1. java jsf table_JSF数据表(h:dataTable)排序数据

    JSF中有一个叫作DataTable的控件,可用来渲染和格式化html表格.使用DataTable,我们可以迭代收集或数组数组来显示数据.下面我们来学习如何向DataTable排序数据. 要使用Dat ...

  2. JSF标签之数据表h:dataTable

    以下代码可以在我的资源中下载 JavaServer Faces核心编程(第3版)源码 @ManagedBean @SessionScoped public class TableData {priva ...

  3. mysql数据库视图重命名_数据表和视图:修改数据表

    在MySQL中,ALTER 语句用来修改数据表名称或者数据表字段名称.也可以用来添加或者删除数据表字段. ALTER 语句经常和"ADD", "DROP" an ...

  4. navicat mysql 建表语句_Navicat for MySQL怎么/如何创建数据表?Navicat for MySQL创建数据表教程_斗蟹游戏网...

    [斗蟹攻略]Navicat for MySQL是针对MySQL数据库管理而研发的管理工具,创建数据表是其最基本操作,下面就由斗蟹小编介绍Navicat for MySQL创建数据表的方法. Navic ...

  5. mysql 字段写入_MySQL为数据表的指定字段插入数据

    username not null 没有默认值/有默认值   insert不插入username字段 均不报错 2014年07月23日21:05    百科369 MySQL为数据表的指定字段插入数据 ...

  6. JavaWeb项目监听数据表变化并通知前台(数据来源于自身)

    最近公司有些项目中需要java程序去监听数据表,当数据有变化时把新数据通知前台并且展示出来.本人也去百度上查询了好多相关知识(本意是有现成抄的就直接抄,哈哈,但无奈没有),然后根据自己的理解写了个de ...

  7. pythonpandas用sql查询数据表_pandas从数据库读取数据

    因为本周有一个是需要使用pandos做一个数据分析的需求,所以在这里做一下记录. Python中用Pandas进行数据分析,最常用的就是Dataframe数据结构, 这里我们主要介绍Pandas如何读 ...

  8. DataGrip 2019.2.5 —— MySQL数据表迁移到SQL Server数据表解决方案

    问题描述 DataGrip 2019.2.5中导出的MySQL数据库的数据表不能直接迁移到SQL Server数据库的数据表. 系统环境 DataGrip 2019.2.5 MySQL 8.0 SQL ...

  9. myisam数据表根据frm文件恢复数据表

    有时,我们重装mysql时,可能忘记备份数据了, 只留下了之前的mysql下面的data文件夹里的数据, 这时我们应该如何去恢复数据表呢 如果直接将原来的data目录导进现在的mysql,肯定是不行的 ...

最新文章

  1. 微服务化的数据库设计与读写分离
  2. 关于Github(1)
  3. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)
  4. layui根据name获取对象_JavaScript对象 - 初识
  5. 斯坦福CS231n项目实战(二):线性支持向量机SVM
  6. python idea控制台中文乱码_python 解决cv2绘制中文乱码问题
  7. (*长期更新)软考网络工程师学习笔记——Section 2 数字传输系统
  8. 读入自然数m、n,判断m/n是有限小数还是循环小数
  9. 实验 4 [bx]和 loop 的使用
  10. java 重构 if else_项目中的if else太多了,该怎么重构?
  11. 经典面试题(30):以下代码将输出的结果是什么?
  12. java 命令 native2ascii_java native2ascii.exe命令
  13. python零基础能学吗-python零基础能学吗
  14. 《项目百态》读感系列”玩的就是心跳“
  15. 操作系统原理与Linux实践教程申丰山版习题2的2-3答案
  16. 【Jenkins】windows系统下Jenkins的下载、安装与启动
  17. 在odl中如何实现rpc
  18. Python与企业微信-3
  19. 装了svn桌面右键没有_右键菜单没有svn选项怎么办|win7 svn没有右键菜单怎么解决|svn添加到右键菜单方法...
  20. pytorch super 的用法

热门文章

  1. linux 卸载、安装mysql
  2. 关于Patter类和Match类
  3. 第四篇: UpdatePanel 控件--触发机制Triggers
  4. Google Perf Tools安装以及使用
  5. 微型计算机系统的主存储器,微型计算机系统中 ,操作系统保存在硬盘上,其主存储器应该采用 ( )...
  6. python输出运行时间_分析python程序运行时间的几种方法
  7. integer为null_走进 JDK 之 Integer
  8. 5.Struts2配置形式,覆盖
  9. U盘安装Linux安装报错及解决方案
  10. 对PostgreSQL中bgwriter的 MyProc 的理解