浏览 3469 次
锁定老帖子 主题:使用JSF的事件机制实现复选框的全选
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-30
最后修改:2009-10-30
下面就做一个简单的利用jsf的事件机制实现checkbox的全选功能。 首先定义一个pojo类,代码如下所示 package com.zxyg.jsf.model; public class User { private String username; private String password; /** 为了实现全选,必须定义一个boolean的变量 **/ private boolean selected; public boolean isSelected() { return selected; } public void setSelected(boolean selected) { this.selected = selected; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 这里要说明的是,由于jsf是基于前台向后台传递事件来达到某些功能,所以我要在User类里面定义一个boolean的变量用来表示是否选择上。 接下来定义后台的BackingBean,代码如下 package com.zxyg.jsf.backingbean; import java.util.ArrayList; import java.util.List; import javax.faces.event.ActionEvent; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; import com.zxyg.jsf.model.User; public class UserBean { private DataModel dataModel; private boolean selectAll; public UserBean() { dataModel = new ListDataModel(); } /** * dataModel中加入数 * 这里用了一个集合来模拟从数据库中去出来的数据 * @return */ public String queryData() { List<User> userList = new ArrayList<User>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setUsername("hello" + i); user.setPassword("abc" + i); userList.add(user); } dataModel.setWrappedData(userList); return "selectAll"; } public DataModel getDataModel() { return dataModel; } /** * 这里接受处理页面的监听方法, * 点击后是否全选或取消全选 * @param event */ public void disAndselectAll(ActionEvent event) { List<User> userList = (List<User>) dataModel.getWrappedData(); for (User user : userList) { user.setSelected(selectAll); } } public void setDataModel(DataModel dataModel) { this.dataModel = dataModel; } public boolean isSelectAll() { return selectAll; } public void setSelectAll(boolean selectAll) { this.selectAll = selectAll; } } faces-config.xml配置文件如下 <?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd" version="1.2"> <managed-bean> <managed-bean-name>userBean</managed-bean-name> <managed-bean-class> com.zxyg.jsf.backingbean.UserBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <navigation-rule> <navigation-case> <from-outcome>selectAll</from-outcome> <to-view-id>/select_all.jsp</to-view-id> </navigation-case> </navigation-rule> </faces-config> 后台准备工作结束后,下面是前端页面代码,代码如下 <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <f:view> <h:form> <h:dataTable var="user" value="#{userBean.dataModel}"> <h:column> <f:facet name="header"> <h:commandLink actionListener="#{userBean.disAndselectAll}"> <h:selectBooleanCheckbox value="#{userBean.selectAll}"></h:selectBooleanCheckbox> </h:commandLink> </f:facet> <h:selectBooleanCheckbox value="#{user.selected}"></h:selectBooleanCheckbox> </h:column> <h:column> <f:facet name="header"> <h:outputText value="username"> </h:outputText> </f:facet> <h:outputText value="#{user.username}"></h:outputText> </h:column> <h:column> <f:facet name="header"> <h:outputText value="password"></h:outputText> </f:facet> <h:outputText value="#{user.password}"></h:outputText> </h:column> </h:dataTable> </h:form> </f:view> 都搞定以后,跑起来看下。全选功能都实现了,如下图所示。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-26
最后修改:2010-01-26
我用你的例子测了一下,怎么checkbox列表没有东西啊,所以全选时候报空指针。
应该是queryData()那个方法没有执行,不知道什么问题。 |
|
返回顶楼 | |
发表时间:2010-01-26
找到原因了。就是因为你在构造函数没有在dataModel里面放数据,加上queryData()就好了。
public UserBean() { dataModel = new ListDataModel(); this.queryData(); } |
|
返回顶楼 | |