`
fengfeng925
  • 浏览: 107114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用JSF的事件机制实现复选框的全选

阅读更多
一般在类似于struts,webwork这样的基于请求的框架来说,实现复选框的全部选择需要借助javascript来完成。但对于jsf这样基于事件的框架来说,实现复选框的权限可以通过jsf本身提供的一些功能来完成。

下面就做一个简单的利用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>


都搞定以后,跑起来看下。全选功能都实现了,如下图所示。
  • 大小: 14.7 KB
分享到:
评论
2 楼 bananax 2010-01-26  
找到原因了。就是因为你在构造函数没有在dataModel里面放数据,加上queryData()就好了。
public UserBean() {
dataModel = new ListDataModel();
this.queryData();
}
1 楼 bananax 2010-01-26  
我用你的例子测了一下,怎么checkbox列表没有东西啊,所以全选时候报空指针。
应该是queryData()那个方法没有执行,不知道什么问题。

 

相关推荐

    JSF中使用BooleanCheckbox实现全选功能

    这篇博客文章“JSF中使用BooleanCheckbox实现全选功能”可能详细讲解了如何利用这种组件在用户界面中创建一个可以勾选的复选框,以便一次性选择或取消选择多个条目。下面我们将深入探讨JSF中的BooleanCheckbox及其在...

    JSF的工作方式 JSF架构 JSF模型 JSF事件类型

    ### JSF事件类型 JSF支持多种事件类型,这些事件可以在组件之间或应用程序级别触发。例如: - **组件级事件**:发生在特定UI组件上,如点击按钮或选择下拉框选项。 - **应用程序级事件**:在更广泛的范围内传播,...

    使用JSF和MyFaces实现文件上载

    总之,使用JSF和MyFaces实现文件上传虽然需要一些额外的配置和处理,但通过遵循上述步骤和最佳实践,可以有效地在JavaWeb应用程序中实现这一功能。这不仅提高了用户体验,也增强了应用程序的功能性和实用性。

    JSF+hibernate实现批量删除

    总的来说,JSF与Hibernate结合使用可以方便地实现Web应用中的批量删除功能。开发者可以通过声明式编程方式构建用户界面,同时利用Hibernate的ORM能力处理数据库操作。在实际开发中,还需要注意错误处理、权限控制、...

    sun的jsf接口和实现的源文件下载

    9. **扩展性**:JSF设计为可扩展的,可以通过自定义渲染器、事件监听器、组件行为以及提供自己的FacesServlet实现来扩展其功能。 10. **依赖注入**:JSF 1.2虽然没有内置的依赖注入机制,但可以与其他框架(如...

    JSF文件下载实现

    在本文中,我们将深入探讨如何使用JSF来实现在Web应用程序中下载文件的功能。主要涉及的关键知识点包括: 1. **JSF上下文环境获取**: 在`downloadFile`方法中,首先通过`FacesContext.getCurrentInstance()`获取...

    第8章 JSF事件处理(熊)课件及示例程序

    通过分析和运行这些示例,可以加深对JSF事件处理机制的理解。 在实际开发中,熟练掌握JSF事件处理不仅能够提高应用程序的灵活性,还能帮助我们更好地控制用户的交互流程,实现复杂的业务逻辑。通过对事件和监听器的...

    JSF框架使用入门(初学jsf必备)

    JSF(JavaServer Faces)框架是一个用于构建Web应用程序的组件模型框架,由Oracle公司维护,是Java ...通过这个基础,你可以进一步学习JSF的更高级特性,如数据绑定、事件处理、国际化等,以构建更复杂的Web应用程序。

    JSF标准的两个实现

    JSF规范定义了API和事件模型,而具体的实现则由不同的提供商完成。在JSF领域,有两个重要的实现:官方实现和Apache MyFaces实现。 **1. JSF官方实现** JSF的官方实现通常指的是Oracle公司提供的Mojarra项目。...

    JSF框架及其简单的实例

    2. **事件(Events)**:JSF中的事件处理机制允许组件之间进行通信。当用户与组件交互时(如点击按钮),可以触发相应的事件,并由其他组件监听并响应。 3. **模型(Model)**:模型层通常包含业务逻辑和数据处理。...

    jsf实现登录功能

    在这个"jsf实现登录功能"的例子中,我们将探讨如何利用JSF来构建一个基本的用户登录系统。 首先,登录功能通常包括两部分:前端页面和后端逻辑。在JSF中,前端页面通常由XHTML文件(.xhtml)组成,这些文件结合了...

    用jsf做的登录注册的组件

    这可以通过在Bean中定义验证方法或者使用JSF提供的Validator接口实现。 5. **会话管理**:在登录成功后,通常会将用户信息保存在session中,以便后续页面访问时能识别用户身份。JSF提供了`FacesContext`对象来操作...

    JSF框架使用入门

    JSF(JavaServer Faces)是Java平台上的一种用于构建用户界面的Web应用开发框架,它提供了一种组件化和事件驱动的方式来创建动态、交互式的Web应用。JSF的主要优点在于其强大的UI组件库、与Java EE的紧密集成以及对...

    jsf框架

    - 如果使用Sun提供的JSF实现,则需确保与RichFaces版本兼容。 #### Apache MyFaces - 对于MyFaces,可能需要额外配置以启用某些高级特性。 #### Facelets支持 - Facelets是一种更强大的视图技术,可以与JSF结合...

    JSF框架入门教程和JSF的jar包

    3. **编写第一个JSF页面**: 使用Facelets创建一个简单的Hello, World页面,了解组件的使用。 4. **Managed Bean的创建和使用**: 编写Managed Bean,处理页面请求和数据。 5. **调试和测试**: 运行应用,通过浏览器...

    JSF Java Server Faces (JSF)框架

    JSF是一种用于构建Java ... 包含JSP页面的JSF应用程序也使用由为了表现UI组件和在页面上的其他对象的JSF技术而定义的标准的tag库。 Java Server Faces技术的重要开发框架 sun-ri、myfaces、icefaces、richfaces、seam

    JSF框架中使用的设计模式介绍

    在JSF中,例如,UIComponent可以监听其他组件的事件,实现组件间的交互。 通过理解和应用这些设计模式,JSF框架能够有效地处理复杂的Web应用程序需求,提高代码质量,简化开发流程,并为团队协作提供了一套通用的...

    jsf 实现

    2. **事件处理机制**:JSF1.2中的事件处理变得更加灵活,支持多种事件类型,包括但不限于客户端事件和服务器端事件,这为与Ajax的结合提供了基础。 3. **Ajax框架的集成**:为了更好地利用Ajax,开发者可能会选择...

    Jsf整合三大框架及Spring Security

    它为开发者提供了丰富的UI组件、事件处理机制和生命周期管理,使得创建用户界面变得更加简单。在这个项目中,JSF将与三大框架——Spring、Hibernate和PrimeFaces进行深度整合,以实现更高效、更灵活的应用开发。 1....

Global site tag (gtag.js) - Google Analytics