`
laoli5290
  • 浏览: 80194 次
  • 性别: 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编程提出了一个自定义渲染器实现分页显示大量数据的技术,对该书的代码进行改进和增强后可以得到一个功能强大、使用简单的分页标签。 本资源包含了该分页标签全部的修改后的代码、配置文件示例、使用方法示例...

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

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

    基于primefaces对table的增删改查的源码

    使用JSF框架,以及primefaces实现对表格的增删改查

    《JSF入门》简体中文版

    也可以动态的展现数据(像是动态的查询表格内容),JavaServer Faces提供标准的标签,这可以与网页编辑程序结合在一起,另一方面,JavaServer Faces也允许您自定义标签。 从应用程序设计人员的角度来看,JavaServer ...

    hotel-booking:基于 JSF、Spring、Hibernate、PrimeFaces 的酒店预订 Web 应用程序

    使用的技术:Maven、Spring、Spring Security、Hibernate、JSF、PrettyFaces、PrimeFaces、GMaps4JSF、Jetty、MySQL。 ## 跑步 ## 首先,您需要执行(MySQL)。 然后运行构建和部署: mvn jetty: run ##主要...

    PrimeFaces学习教程

    1.2 配置,JSF2.0环境下用PrimeFace2.x 4 1.3 Hello World入门示例 4 1.4 UI组件: 4 2 UI组件 5 2.1 布局 5 2.1.1 Layout 页面布局 5 2.1.2 Panel用于包含其它组件,提供象windows窗口式的外观。 8 2.1.3 TabView ...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    ParamQuery Grid 2.0.4 API

    使用ParamQuery,开发者可以轻松地实现以下特性: 排序 分页浏览 可以调整数据栏的大小 可以调整表格的高度和宽度 自定义主题 隐藏或显示列 像Excel那样冻结任意多列 显示任意数据源格式,像HTML、数组、XML、JSON等...

    jQuery网格插件ParamQuery.zip

    使用ParamQuery,开发者可以轻松地实现以下特性: 排序 分页浏览 可以调整数据栏的大小 可以调整表格的高度和宽度 自定义主题 隐藏或显示列 像Excel那样冻结任意多列 显示任意数据源格式,像HTML...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    LightBulb:示例应用程序

    对于JSF 的JPA 支持hibernate 库,使用了标准的javax 实现。 Maven 被选为构建工具,您可以想象 - git 用于版本控制。 应用程序本身展示了如何在不使用 JBoss 或 WebSphere 等重型应用程序服务器的情况下开发 JPA/...

    TeamWork-JLU_info_sys:五个同性恋者共同努力,创造出伟大的事物

    EJB:将一些“类”放到甲服务器上,B服务器对甲服务器上的“类”进行远程调用和实现而不考虑网络方面的技术(用于大型企业分布式计算)JSF:的JavaWeb前端的一个框架,用于开发界面,某些在网络界面添加表格组件来...

    JAVA上百实例源码以及开源项目

     [TablePanel.java] 日历表格面板  [ConfigLine.java] 控制条类  [RoundBox.java] 限定选择控件  [MonthMaker.java] 月份表算法类  [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件...

    JAVA上百实例源码以及开源项目源代码

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

    Spring中文帮助文档

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

    Spring API

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

Global site tag (gtag.js) - Google Analytics