关于h:dataTable的使用
基本用法
后台处理
可以在table的每一行增加操作用于处理当前行(比如删除当前行),也可以在table外增加操作处理整个table(更新整个table),页面代码如下:
我们可以有多种方式来处理
1】 传统的jsp方式,也是很多初学者首先想到的方式,这种方式本质上和以前的方式没有区别,只是披上了jsf的外衣而已,强烈建议不要使用。并且这样没有办法处理整个table,按以前的方式处理是相当的麻烦。
给每一行的操作增加参数,然后在后台提取该参数
<t:dataTable var="emp" .... >
<h:commandLink id="editLink" action="#{employeeAction.prepareEdit}">
<h:outputText value="#{msg.edit}"/>
<f:param name="id" value="#{emp.id}"/>
</h:commandLink>
FacesContext context = FacesContext.getCurrentInstance();
Map map = context.getExternalContext().getRequestParameterMap();
String employeeID = (String) map.get("id");
2】 使用actionListener,来取得当前行的数据。整个表的处理很简单,直接获取list即可(参加方法3)
<h:commandLink>
<f:actionListener type="net.java.OrderActionListener" />
<h:outputText value="Order" />
</h:commandLink>
public class orderActionListener implements ActionListener {
public void processAction(ActionEvent anEvent) throws AbortProcessingException {
YourBeanClass tmpBean = null;
UIComponent tmpComponent = anEvent.getComponent();
while (null != tmpComponent && !(tmpComponent instanceof UIData)) {
tmpComponent = tmpComponent.getParent();
}
if (tmpComponent != null && (tmpComponent instanceof UIData)) {
Object tmpRowData = ((UIData) tmpComponent).getRowData();
if (tmpRowData instanceof YourBeanClass) {
tmpBean = (YourBeanClass) tmpRowData;
//TODO Implementation of your method
}
}
3】 通过绑定tale,这样就可以在后台直接通过table来获取当前行了,而不像方法2那样通过事件来获得table
<h:dataTable binding="#{testSelectItems.table}" id="hotels" value="#{testSelectItems.list}" var="hot">
<h:column id="c1">
<f:facet name="header" id="f1">label</f:facet>
<h:inputText id="bbb" value="#{hot.label}" required="true"/>
</h:column>
<h:column id="c2">
<f:facet name="header" id="f2">value</f:facet>
<h:inputText id="aaa" value="#{hot.value}" required="true"/>
</h:column>
<h:column id="c3">
<f:facet name="header" id="f3">link</f:facet>
<!- 处理当前行
<h:commandLink id="ccc" action="#{testSelectItems.actionTest1}" value="#{hot.value}">
xxx#{hot.label}
</h:commandLink>
</h:column>
</h:dataTable>
<!- 处理全部行
<h:commandButton action="#{testSelectItems.actionTest}"/>
</h:form>
public class TestSelectItems {
private UIData table=new UIData();
private List list;
public List getList(){
System.out.println("---TestSelectItems-getList----1---");
if(list==null){
System.out.println("--TestSelectItems-getList-----2---");
list=new ArrayList();
SelectItem it=new SelectItem();
it.setLabel("lable1");
it.setValue("1");
list.add(it);
it=new SelectItem();
it.setLabel("lable2");
it.setValue("2");
list.add(it);
}
return list;
}
//处理全部行
public void actionTest(){
System.out.println("----list.size():"+list.size());
System.out.println("--actionTest--");
}
//处理单行
public void actionTest1(){
SelectItem dd=(SelectItem)table.getRowData();
System.out.println("--actionTest1--:"+dd.getLabel());
}
public UIData getTable() {
return table;
}
public void setTable(UIData table) {
this.table = table;
}
增加多选操作
参见http://yourenyouyu2008.iteye.com/blog/201138
实现原理
分享到:
相关推荐
4. **列显示**:使用`<h:column>`标签为每列定义显示内容,可以是文本、输入框或其他组件。对于可编辑的列,可以使用`<h:inputText>`替换`<h:outputText>`。 5. **编辑模式**:为了实现单行编辑,通常需要一个触发...
在JSF页面中,DataTable通常通过`<h:datatable>`标签来声明。开发者需要指定一个值属性,该属性指向包含要显示数据的列表,以及一个var属性,用于在循环中引用当前项。 ```html <h:dataTable value="#{bean....
通过学习和实践这个“ajax4jsf 刷新datatable 例子”,开发者可以深入理解如何结合使用Ajax4jsf和JSF的datatable组件来创建交互性强且响应迅速的Web应用程序。在myweb项目中,你可以找到具体实现这些功能的代码和...
如:richfaces、primefaces、myfaces等,就日前来讲primefaces功能很强大,控件很多,但有一点不好就是不支持IE6,特别是下拉列表,p:dialog等,其它的分页p:datatable实际使用起来总有不如意的地方。richfaces还...
4. **JSF实现排序功能**:在`<h:datatable>`中,可以使用`sortBy`属性来指定列的排序依据。同时,可以提供排序图标(升序/降序)和监听用户点击事件来实现动态排序。排序功能对于数据量较大的表格尤其有用。 5. **...
在使用***进行JSON数据到DataTable的数据集解序列化时,需要特别注意数据类型自动推断导致的小数位丢失问题。由于DataTable的列名不区分大小写以及数据类型推断是基于第一行数据的特性,可能会导致小数位被错误地...
要使用`rich:dataTable`组件,首先需要在页面中引入相应的RichFaces库,并确保项目中已经添加了RichFaces依赖。 在示例代码中,可以看到`rich:dataTable`的配置如下: ```xml <rich:dataTable id="carList" width=...
Java Server Faces API 组件标签 API Reference 速查手册 ... javax.faces.Command javax.faces.Button javax.faces.Link javax.faces.Data javax.faces.Table ...h:dataTable h:form h:graphicImage
<h:dataTable value="#{loginBean.persons}" var="person" border="5" cellpadding="5" cellspacing="2"> <h:column> <f:facet name="header"> <h:outputText id="headerText1" value="职工号"/> </f:facet>...
- `h:dataTable`:用于显示动态数据,常与数据模型(如List或ArrayList)绑定。 - `p:tree`和`p:treeTable`(PrimeFaces扩展):用于展示层次结构的数据。 8. **导航控件**: - `h:commandButton`和`h:...
综上所述,这个项目可能是一个使用Maven管理的、基于Spring Boot的Web应用,它利用MyBatis Plus简化数据库操作,使用H-ui Admin作为后台管理界面,并通过dataTable插件增强表格展示。由于描述中提到“不用数据库”,...
facet标签用于申明一种特殊的关系,常与h:panelGrid和h:dataTable等标签连用,申明组件为标题或页脚。示例代码: ``` <f:facet name="header"> <h:outputText value="Title"/> </f:facet> ``` loadBundle load...
本书对JSF中的标准组件进行了详尽的介绍,包括`<h:inputText>`、`<h:commandButton>`、`<h:dataTable>`等。这些组件不仅简化了HTML元素的使用,还提供了数据绑定、事件处理等功能。例如,`<h:dataTable>`用于展示...
- **分页**:使用`rows`和`rowsPerPage`属性控制每页显示的数据量,通过`first`和`last`属性获取当前页数据。 - **筛选**:可以添加`<rich:filter>`来实现列级别的筛选功能。 6. **优化和性能** 为了优化...
<h:dataTable value="#{bean.items}" var="item"> <h:column> <f:facet name="header">Item ID</f:facet> #{item.id} </h:column> <h:column> <f:facet name="header">Item Name</f:facet> #{item.name} </h...
这个组件通常与`p:dataTable`配合使用,后者用于显示数据集: ```html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:p=...
一旦查询结果集准备好,就可以使用JSF组件如`<h:dataTable>`来展示结果。 ```html <h:dataTable value="#{bean.resultSet}" var="row"> <h:column> <f:facet name="header">Email</f:facet> #{row.EMAIL} </h:...