最近一个查询,需要实现动态列的展示,在官方例子中找了好久没找到,最后搜索到一片文章,使用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来实现。
相关推荐
### 使用JSF页面动态创建表格 #### 背景与目的 在开发Web应用程序时,经常需要根据不同的数据集或用户操作动态生成表格。JavaServer Faces(简称JSF)是一种用于构建服务器端Java应用程序的标准技术,它允许开发者...
下面我们将详细探讨JSF动态创建表单控件的概念、实现方法以及相关的实例。 1. **JSF控件基础**: JSF中的控件通常由UIComponent、UIInput和UICommand等接口实现,它们代表了HTML元素,如文本框、按钮等。这些控件...
本篇文章将详细探讨如何利用JSF与Hibernate相结合来实现批量删除功能,以及在CRUD(创建、读取、更新和删除)操作中的应用。 首先,我们需要理解JSF的工作原理。JSF是一个基于组件的MVC(Model-View-Controller)...
### 使用自定义渲染器实现JSF数据库表分页显示 #### 概述 在JavaServer Faces (JSF) 应用程序中处理大量的数据时,分页是一个非常实用且必要的功能。通过合理地分页展示数据,不仅可以提高用户体验,还可以减少...
本篇将详细讲解如何在JSF中实现动态分页。 **1. JSF组件库与动态分页** JSF提供了一些基本的UI组件,但默认并未包含分页组件。在实际开发中,我们通常会借助第三方库来实现这一功能。在给定的资源中,"myfaces-...
在本案例中,可能涉及到使用Ajax来实现动态加载表单数据、实时验证用户输入或动态显示结果。虽然名称中包含XML,但实际的Ajax通信并不局限于XML,也可以使用JSON等其他格式的数据。 5. **源代码分析**:提供的...
在这个"JSF实现的CRUD例子 myeclipse"中,我们将探讨如何使用JSF和MyEclipse开发一个简单的CRUD(Create, Read, Update, Delete)应用,而无需连接到数据库。 首先,"first-java-server-faces-tutorial-en.pdf"可能...
3. **JSF组件**:JSF提供了丰富的UI组件,如输入字段、表格和按钮,用于创建用户界面。在数据仓库实现中,这些组件将用于展示数据仓库中的信息,并接收用户的输入以执行查询或其他操作。 4. **后台处理**:当用户与...
3. 数据表格的实现:在JSF页面中,使用`t:dataTable`标签来展示数据表格,通过绑定JSF Bean的数据,实现数据的展示和操作。 4. 文件下载的实现:通过使用`HttpServletResponse`和`OutputStream`,实现文件的下载。...
PrimeFaces是一个基于JSF的UI组件库,提供了大量的预定义UI元素,如表格、按钮、图表等,极大地简化了前端开发。例如,我们可以利用PrimeFaces的FileUpload组件来实现文件上传功能,用户可以通过浏览器直接选择文件...
生成Excel并在客户端下载的JSF实现
在IT行业中,JavaScript Server Faces(JSF)是一种用于构建企业级Web应用的Java框架,而本文将重点关注如何在JSF环境中实现Excel文件的上传、处理并将其内容导入到数据库中,以及在浏览器中预览Excel表格。...
在本项目中,“jsf+javabean+jdbc完成对表增删查改”指的是使用JSF与JavaBean以及JDBC技术来实现对数据库中表格的基本操作:添加(Insert)、删除(Delete)、查询(Query)和修改(Update)。 首先,让我们深入...
JSF 1.2提供了一套丰富的预定义UI组件,如按钮、输入字段、表格等。这些组件可以通过XML(Faces配置文件)或者在JSP页面上直接声明。例如,`<h:inputText>`用于创建文本输入字段,`<h:commandButton>`用于创建提交...
通过导航规则,JSF可以控制用户操作后的页面跳转,实现动态的页面流程。 **7. JSF生命周期** JSF组件有六个主要的生命周期阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用和渲染响应。理解这些阶段...
JSF框架提供了丰富的内置组件库,如输入字段、按钮、表格等,使得开发者可以快速构建用户界面。 **源码**在JSF中指的是框架的核心组件和自定义组件的实现代码。理解和分析源码可以帮助开发者深入理解JSF的工作原理...
- JSF组件库包括各种UI元素,如输入框、按钮、表格、下拉列表等,这些组件可以方便地组合以创建复杂的用户界面。 - 典型的组件库有Apache MyFaces和Mojarra,它们提供了丰富的预定义组件,同时支持自定义组件的...
JSF 1.2引入了更丰富的组件库,包括输入字段、按钮、表单、表格等,这些组件可以方便地进行组合和定制。 2. **事件驱动**: 用户操作触发事件,JSF组件通过监听这些事件来响应用户的交互。例如,点击按钮会触发一个...
JSF提供了丰富的组件库,包括按钮、表单、输入字段、表格、菜单等。这些组件可以通过XML声明在页面上,也可以在Java代码中动态添加。每个组件都有自己的属性和事件处理机制,使得开发者能够灵活地设计和控制用户界面...
JSF的表格处理机制提供了一种动态表格数据的输出机制,使得开发人员可以轻松地构建Web应用程序的表格界面。 JSF的生命周期 JSF的生命周期是指JSF组件的生命周期,包括组件的创建、初始化、渲染和销毁等阶段。 JSF...