在 简单的表格
- 阵列
- java.util.List的实例
- java.sql.ResultSet的实例
- javax.servlet.jsp.jstl.sql.Result的实例
- javax.faces.model.DataModel的实例
对于前四种型态,JSF实际上是以javax.faces.model.DataModel加以包装,DataModel是个抽象类别,其子类别都是位于 javax.faces.model这个package下:
- ArrayDataModel
- ListDataModel
- ResultDataModel
- ResultSetDataModel
- ScalarDataModel
如果您想要对表格资料有更多的控制,您可以直接使用DataModel来设定表格资料,呼叫DataModel的setWrappedObject()方法可以让您设定对应型态的资料,呼叫getWrappedObject()则可以取回资料,例如:
TableBean.java
package onlyfun.caterpillar;
import java.util.*;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
public class TableBean {
private DataModel model;
private int rowIndex = -1;
public DataModel getUsers() {
if(model == null) {
model = new ListDataModel();
model.setWrappedData(getUserList());
}
return model;
}
private List getUserList() {
List userList = new ArrayList();
userList.add(new UserBean("caterpillar", "123456"));
userList.add(new UserBean("momor", "654321"));
userList.add(new UserBean("becky", "7890"));
return userList;
}
public int getSelectedRowIndex() {
return rowIndex;
}
public String select() {
rowIndex = model.getRowIndex();
return "success";
}
}
在这个Bean中,我们直接设定DataModel?,将userList设定给它,如您所看到的,我们还可以取得DataModel?的各个变项,在这个例子中,select()将作为点选表格之后的事件处理方法,我们可以藉由DataModel?的getRowIndex ()来取得所点选的是哪一row的资料,例如:
index.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<link href="styles.css" rel="stylesheet" type="text/css"/>