`
laoli5290
  • 浏览: 81298 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

JSF动态表格实现

    博客分类:
  • JSF
阅读更多

    最近一个查询,需要实现动态列的展示,在官方例子中找了好久没找到,最后搜索到一片文章,使用c标签和jsf标签结合可以实现。我简单模拟了一下,我具体的使用场景是,在页面选择不同的列展现,现在我用文本框向后台传列名来模拟实现。



 

    比如在上图,我通过字段名向后台传参,点击查询后如下图展示:



     一开始我以为jsf或者richfaces带了相关的组件,通过查找资料,发现最新版本中没有相关的实现,通过搜索资料,发现有人用jstl标签来实现。

    Bean代码:

@ManagedBean(name = "dyncolumnBean")
@SessionScoped
public class DyncolumnBean extends BaseMBean{

	private List<Object> count;
	private List<String> header;
	private String columnName;
	private int rowNum;
	
	private List<User> dataList;
	private Map<String, Object> keyMap;
	
	private int columnNum;
	
	
	public void init(){
		columnName = "";
		columnNum = 3;
		dataList = new ArrayList<User>();
		dataList.add(new User("李四", "30", "男"));
		dataList.add(new User("李四1", "31", "男"));
		dataList.add(new User("李四2", "32", "男"));
		dataList.add(new User("李四3", "33", "女"));
//		count = Arrays.asList(new Object[4]);  //数据行
		header = Arrays.asList(new String[]{"姓名","年龄","性别"});
		initKeyMap();
			
		
	}
	
	public void initKeyMap(){
		keyMap = new HashMap<String, Object>(){
			{
				put("姓名", "username");
				put("年龄", "userage");
				put("性别", "usersex");
				put("column1", "userco1");
				put("column2", "userco2");
				put("column3", "userco3");
				put("column4", "userco4");
				put("column5", "userco5");
				put("column6", "userco6");
				put("column7", "userco7");
				put("column8", "userco8");
			}
		};
	}
	
	public void initData(){
		if(rowNum > 0){
			for(int t=0;t<rowNum;t++){
				dataList.add(new User("李四"+t, "30"+t, "男"+t, "co1"+t, "co2"+t, "co3"+t, "co4"+t, "co5"+t, "co6"+t, "co7"+t, "co8"+t));
			}
		}
	}
	
	public void list(){
		if(StringUtils.isNotBlank(columnName)){
			dataList = new ArrayList<DyncolumnBean.User>();
			String[] coArr = columnName.split(",");
			header = Arrays.asList(coArr);
			columnNum = coArr.length;
			initData();
		}
	}


	public List<Object> getCount() {
		return count;
	}


	public void setCount(List<Object> count) {
		this.count = count;
	}


	public List<String> getHeader() {
		return header;
	}


	public void setHeader(List<String> header) {
		this.header = header;
	}


	public List<User> getDataList() {
		return dataList;
	}

	public void setDataList(List<User> dataList) {
		this.dataList = dataList;
	}

	public Map<String, Object> getKeyMap() {
		return keyMap;
	}

	public void setKeyMap(Map<String, Object> keyMap) {
		this.keyMap = keyMap;
	}

	public int getColumnNum() {
		return columnNum;
	}


	public void setColumnNum(int columnNum) {
		this.columnNum = columnNum;
	}
	
	
	
	public String getColumnName() {
		return columnName;
	}

	public void setColumnName(String columnName) {
		this.columnName = columnName;
	}

	public int getRowNum() {
		return rowNum;
	}

	public void setRowNum(int rowNum) {
		this.rowNum = rowNum;
	}



	public class User{
		private String username;
		private String userage;
		private String usersex;
		private String userco1;
		private String userco2;
		private String userco3;
		private String userco4;
		private String userco5;
		private String userco6;
		private String userco7;
		private String userco8;
		
		public User(String username, String userage, String usersex){
			this.username = username;
			this.userage = userage;
			this.usersex = usersex;
		}
		
		public User(String username, String userage, String usersex, String userco1,
				String userco2,String userco3,String userco4,String userco5,
				String userco6,String userco7,String userco8){
			this.username = username;
			this.userage = userage;
			this.usersex = usersex;
			this.userco1 = userco1;
			this.userco2 = userco2;
			this.userco3 = userco3;
			this.userco4 = userco4;
			this.userco5 = userco5;
			this.userco6 = userco6;
			this.userco7 = userco7;
			this.userco8 = userco8;
		}

		public String getUsername() {
			return username;
		}

		public void setUsername(String username) {
			this.username = username;
		}

		public String getUserage() {
			return userage;
		}

		public void setUserage(String userage) {
			this.userage = userage;
		}

		public String getUsersex() {
			return usersex;
		}

		public void setUsersex(String usersex) {
			this.usersex = usersex;
		}

		public String getUserco1() {
			return userco1;
		}

		public void setUserco1(String userco1) {
			this.userco1 = userco1;
		}

		public String getUserco2() {
			return userco2;
		}

		public void setUserco2(String userco2) {
			this.userco2 = userco2;
		}

		public String getUserco3() {
			return userco3;
		}

		public void setUserco3(String userco3) {
			this.userco3 = userco3;
		}

		public String getUserco4() {
			return userco4;
		}

		public void setUserco4(String userco4) {
			this.userco4 = userco4;
		}

		public String getUserco5() {
			return userco5;
		}

		public void setUserco5(String userco5) {
			this.userco5 = userco5;
		}

		public String getUserco6() {
			return userco6;
		}

		public void setUserco6(String userco6) {
			this.userco6 = userco6;
		}

		public String getUserco7() {
			return userco7;
		}

		public void setUserco7(String userco7) {
			this.userco7 = userco7;
		}

		public String getUserco8() {
			return userco8;
		}

		public void setUserco8(String userco8) {
			this.userco8 = userco8;
		}
		
	}
	
	
	
}

    页面代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    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"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:wiztek="http://java.sun.com/jsf/composite/wiztek/oryx">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>实验页面</title>
  </head>
  <ui:composition template="/templates/common.xhtml">
    <ui:define name="title">动态列</ui:define>
    <ui:define name="information">操作</ui:define>
    <ui:define name="control">
		<h:panelGrid columns="8">
			<h:outputLabel value="字段名"/>
			<h:inputText value="#{dyncolumnBean.columnName}" styleClass="input_search" style="width:300px;"/>
			<h:outputLabel value="行数"/>
			<h:inputText value="#{dyncolumnBean.rowNum}" styleClass="input_search"/>
			<h:commandButton value="查询" onclick="startWait();" action="#{dyncolumnBean.list}" styleClass="font2" />
			<h:commandButton value="重置" onclick="startWait();" action="#{dyncolumnBean.reset}" styleClass="font2" />
		</h:panelGrid>
	</ui:define>
    <ui:define name="body">
        <h:dataTable value="#{dyncolumnBean.dataList}" var="item" width="100%" styleClass="table_list_no_align">
          <c:forEach items="#{dyncolumnBean.header}" var="heaObj">
            <h:column>
              <f:facet name="header">
                <h:outputText value="#{heaObj}"/>
              </f:facet>
              <h:outputText value="#{item[dyncolumnBean.keyMap[heaObj]]}"/>
            </h:column>
          </c:forEach>
        </h:dataTable>
	</ui:define>
</ui:composition>
</html>

    这种使用场景下,都可以使用C标签来处理,如果需要固定数据列和数据列的筛选、排序等,可以使用ExtendedDataTable来实现。

  • 大小: 14.8 KB
  • 大小: 23.9 KB
0
1
分享到:
评论

相关推荐

    用jsf页面动态创建表格

    ### 使用JSF页面动态创建表格 #### 背景与目的 在开发Web应用程序时,经常需要根据不同的数据集或用户操作动态生成表格。JavaServer Faces(简称JSF)是一种用于构建服务器端Java应用程序的标准技术,它允许开发者...

    jsf动态创建表单控件实例.

    下面我们将详细探讨JSF动态创建表单控件的概念、实现方法以及相关的实例。 1. **JSF控件基础**: JSF中的控件通常由UIComponent、UIInput和UICommand等接口实现,它们代表了HTML元素,如文本框、按钮等。这些控件...

    JSF+hibernate实现批量删除

    本篇文章将详细探讨如何利用JSF与Hibernate相结合来实现批量删除功能,以及在CRUD(创建、读取、更新和删除)操作中的应用。 首先,我们需要理解JSF的工作原理。JSF是一个基于组件的MVC(Model-View-Controller)...

    利用自定义渲染器实现JSF数据库表分页显示

    ### 使用自定义渲染器实现JSF数据库表分页显示 #### 概述 在JavaServer Faces (JSF) 应用程序中处理大量的数据时,分页是一个非常实用且必要的功能。通过合理地分页展示数据,不仅可以提高用户体验,还可以减少...

    jsf 动态分页 带jar包 解压直接导入eclipse即可,方便学习~

    本篇将详细讲解如何在JSF中实现动态分页。 **1. JSF组件库与动态分页** JSF提供了一些基本的UI组件,但默认并未包含分页组件。在实际开发中,我们通常会借助第三方库来实现这一功能。在给定的资源中,"myfaces-...

    第2部分-动态JSF表单

    在本案例中,可能涉及到使用Ajax来实现动态加载表单数据、实时验证用户输入或动态显示结果。虽然名称中包含XML,但实际的Ajax通信并不局限于XML,也可以使用JSON等其他格式的数据。 5. **源代码分析**:提供的...

    JSF实现的CRUD例子 myeclipse

    在这个"JSF实现的CRUD例子 myeclipse"中,我们将探讨如何使用JSF和MyEclipse开发一个简单的CRUD(Create, Read, Update, Delete)应用,而无需连接到数据库。 首先,"first-java-server-faces-tutorial-en.pdf"可能...

    JSF数据仓库实现

    3. **JSF组件**:JSF提供了丰富的UI组件,如输入字段、表格和按钮,用于创建用户界面。在数据仓库实现中,这些组件将用于展示数据仓库中的信息,并接收用户的输入以执行查询或其他操作。 4. **后台处理**:当用户与...

    poi读取并导出excel(jsf bean 页面的实现)

    3. 数据表格的实现:在JSF页面中,使用`t:dataTable`标签来展示数据表格,通过绑定JSF Bean的数据,实现数据的展示和操作。 4. 文件下载的实现:通过使用`HttpServletResponse`和`OutputStream`,实现文件的下载。...

    JSF+primefaces 网盘实现代码前端

    PrimeFaces是一个基于JSF的UI组件库,提供了大量的预定义UI元素,如表格、按钮、图表等,极大地简化了前端开发。例如,我们可以利用PrimeFaces的FileUpload组件来实现文件上传功能,用户可以通过浏览器直接选择文件...

    生成Excel并在客户端下载的JSF实现[转]

    生成Excel并在客户端下载的JSF实现

    jsf 上传 操作Excel 导入数据库中 浏览器打开Excel表格

    在IT行业中,JavaScript Server Faces(JSF)是一种用于构建企业级Web应用的Java框架,而本文将重点关注如何在JSF环境中实现Excel文件的上传、处理并将其内容导入到数据库中,以及在浏览器中预览Excel表格。...

    jsf+javabean+jdbc完成对表增删查改

    在本项目中,“jsf+javabean+jdbc完成对表增删查改”指的是使用JSF与JavaBean以及JDBC技术来实现对数据库中表格的基本操作:添加(Insert)、删除(Delete)、查询(Query)和修改(Update)。 首先,让我们深入...

    core jsf 1.2 jsf 核心

    JSF 1.2提供了一套丰富的预定义UI组件,如按钮、输入字段、表格等。这些组件可以通过XML(Faces配置文件)或者在JSP页面上直接声明。例如,`&lt;h:inputText&gt;`用于创建文本输入字段,`&lt;h:commandButton&gt;`用于创建提交...

    精通JSF中文教程精通JSF中文教程

    通过导航规则,JSF可以控制用户操作后的页面跳转,实现动态的页面流程。 **7. JSF生命周期** JSF组件有六个主要的生命周期阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用和渲染响应。理解这些阶段...

    jsf

    JSF框架提供了丰富的内置组件库,如输入字段、按钮、表格等,使得开发者可以快速构建用户界面。 **源码**在JSF中指的是框架的核心组件和自定义组件的实现代码。理解和分析源码可以帮助开发者深入理解JSF的工作原理...

    JSF实战(中英版)

    - JSF组件库包括各种UI元素,如输入框、按钮、表格、下拉列表等,这些组件可以方便地组合以创建复杂的用户界面。 - 典型的组件库有Apache MyFaces和Mojarra,它们提供了丰富的预定义组件,同时支持自定义组件的...

    jsf1.2官方例子

    JSF 1.2引入了更丰富的组件库,包括输入字段、按钮、表单、表格等,这些组件可以方便地进行组合和定制。 2. **事件驱动**: 用户操作触发事件,JSF组件通过监听这些事件来响应用户的交互。例如,点击按钮会触发一个...

    JSF教程(有关jsf实例的操作步骤)

    JSF提供了丰富的组件库,包括按钮、表单、输入字段、表格、菜单等。这些组件可以通过XML声明在页面上,也可以在Java代码中动态添加。每个组件都有自己的属性和事件处理机制,使得开发者能够灵活地设计和控制用户界面...

    JSF全面学习教程.docx

    JSF的表格处理机制提供了一种动态表格数据的输出机制,使得开发人员可以轻松地构建Web应用程序的表格界面。 JSF的生命周期 JSF的生命周期是指JSF组件的生命周期,包括组件的创建、初始化、渲染和销毁等阶段。 JSF...

Global site tag (gtag.js) - Google Analytics