1. 引言
eXtremeTable本质上是一个form组件,所以我假定表被包在form里,所有的功能都被认为是对form元素的操作。如果你想在表体中包含一些定制的form元素, 或者想将eXtremeTable嵌入到另外的form中,那么你就要使用表标签的form属性用来参照最近的form。
为了示范form特性,我们要做的工作将分解为JSP,Cell和Controller。
1.1. JSP
下面列出的是checkbox示例的完整代码。想要强调的主要事情是表标签form属性设置为presForm,它参照被称为presForm的form元素。
同时请注意表标签的autoIncludeParameters属性。进行排序、过滤、分页时,默认的eXtremeTable将保持所有传至JSP页面的参数。 这个特性对于内部其他的form进行排序、过滤、分页时,用于高效复制form元素同样有效。可以设置 autoIncludeParameters属性为false来固定它。
在这个form使用id属性是因为xhtm标准的要求,同时你也可以使用form的name属性。
<form id="presForm" action="<c:url value="selectedPresidentsListedController.run"/>" method="post">
Enter your name:
<input
type="text"
name="userName"
style="font-family:verdana,arial,helvetica,sans-serif;font-size:11px;"
value="<c:out value="${param.userName}"/>"
/>
<ec:table
items="presidents"
action="${pageContext.request.contextPath}/selectedPresidentsController.run"
view="compact"
imagePath="${pageContext.request.contextPath}/images/table/compact/*.gif"
rowsDisplayed="8"
autoIncludeParameters="false"
form="presForm"
>
<ec:exportPdf
fileName="output.pdf"
tooltip="Export PDF"
headerColor="black"
headerBackgroundColor="#b6c2da"
headerTitle="Presidents"
/>
<ec:row>
<ec:column
alias="checkbox"
title=" "
width="5px"
filterable="false"
sortable="false"
viewsAllowed="compact"
cell="selectedPresident"
/>
<ec:column property="fullName" title="Name"/>
<ec:column property="nickName" />
<ec:column property="term" />
</ec:row>
</ec:table>
<input
type="button"
name="sel"
class="button"
value="List Selected Presidents"
onclick="document.forms.presForm.submit();"
/>
<script type="text/javascript">
function setPresidentState(chkbx) {
//make sure that always know the state of the checkbox
if (chkbx.checked) {
eval('document.forms.presForm.chkbx_' + chkbx.name).value='SELECTED';
} else {
eval('document.forms.presForm.chkbx_' + chkbx.name).value='UNSELECTED';
}
}
</script>
</form>
1.1.1. Form特性的技术说明
表标签form属性参照最近的form是你使用这个特性所必须知道的,为了更好的理解这个特性,介绍更多的关于内部实现技术的细节是值得的。
如果您不特意指定form属性,eXtremeTable自动在表附近包上一个form。所有表的动作例如:排序、过滤、分页将自动给一些隐藏的input元素赋值,然后提交这个form到表标签action属性设置的Aciton。 这非常有效,除非您想要将自己的form元素设置到表体,或者想将这个表放到别的form里。
表标签form属性参照最近的form,所有表的动作例如:排序、过滤、分页将自动给一些隐藏的input元素赋值,但是现在 最近form的action属性将要改变表标签的动作。这非常重要,因为:当排序、过滤、分页时,eXtremeTable能够从一个controller得到数据集合,但是提交这个form到别的controller来处理这个form时需要对用户的输入进行处理。然而,这些对于你使用表标签来说都是透明的。就像你现在做的那样简单地设置表标签的action属性,然后设置相关的form到你想提交的位置。
1.1.2. Checkbox
示例的第一列是checkbox。因为这列不需要参照bean的属性,alias属性用来唯一地标识这列。你可以使用property 属性,但是alias属性使这列如何使用更清楚。alias属性还被用来当同样的属性被多列使用时唯一地标识一列。
1.1.3. Custom Cell
您也许想知道定制的cell是如何通过名称selectedPresident被参照的(cell="selectedPresident")。这是一个 对eXtremeTable的preferences特性更强的使用。所有要做的就是在extremecomponents.properties文件中添加一个属性。 请参考Preferences来了解更多的信息
column.cell.selectedPresident=org.extremesite.cell.SelectedPresidentCell
column.cell.selectedPresident就是你定义的用来参照这个cell的名称。
当然你也可以使用这个Cell的全名来进行参照。
<ec:column
alias="checkbox"
title=" "
width="5px"
filterable="false"
sortable="false"
viewsAllowed="compact"
cell="org.extremesite.cell.SelectedPresidentCell"
/>
在属性文件中定义参照更方便,它可以被任何JSP文件引用。如果类名或包名改变的话你只需要对一个地方进行修改。
1.1.4. JavaScript
JavaScript的setPresidentState()方法被定制cell用来设置每个checkbox元素的是否被选中。设置一个隐藏元素的原因是为了获得浏览器的动作而不提交没有选中的checkbox。通过这个Controller将一直知道一个元素是否别选中。
1.2. Cell
定制的cell被用来生成checkbox,另外它也创建一个隐藏元素用来表示这个checkbox元素是否被选中。 当用户进行排序、过滤、分页时,被选中的数据集合将被放到session里。
getExportDisplay()方法没有返回值,因为治理只需要Html显示。
public class SelectedPresidentCell implements Cell {
public String getExportDisplay(TableModel model, Column column) {
return null;
}
public String getHtmlDisplay(TableModel model, Column column) {
HtmlBuilder html = new HtmlBuilder();
CellBuilder.tdStart(html, column);
try {
Object bean = model.getCurrentRowBean();
String presidentId = BeanUtils.getProperty(bean, "presidentId");
Collection selectedPresidentsIds = (Collection)model.getContext().getSessionAttribute(SelectedPresidentsConstants.SELECTED_PRESIDENTS);
if (selectedPresidentsIds != null && selectedPresidentsIds.contains(presidentId)) {
html.input("hidden").name("chkbx_" + presidentId).value(SelectedPresidentsConstants.SELECTED).xclose();
html.input("checkbox").name(BeanUtils.getProperty(bean, "presidentId"));
html.onclick("setPresidentState(this)");
html.checked();
html.xclose();
} else {
html.input("hidden").name("chkbx_" + presidentId).value(SelectedPresidentsConstants.UNSELECTED).xclose();
html.input("checkbox").name(BeanUtils.getProperty(bean, "presidentId"));
html.onclick("setPresidentState(this)");
html.xclose();
}
} catch (Exception e) {}
CellBuilder.tdEnd(html);
return html.toString();
}
}
1.3. Controller
提示:Spring框架的Controller和Struts框架的Action非常相像。
当在另外的form中使用eXtremeTable时,你可能有1个或2个controllers。当form被提交时,你需要一个controller 来处理用户的输入并重新定向到另外的JSP页面。当排序、过滤、分页时,你可能有另外的controller来得到表使用的数据集合并重定向会本页。或者你可以在同一个controller中分别处理。
checkbox示例里我使用一个controller来关联表标签的action属性。我也使用另外一个controller来关联form元素的动作。
1.3.1. 表标签动作Controller
这个controller负责调用SelectedPresidentsUtils来保存被选中的presidentIds到session里并回到同一页。
SelectedPresidentsUtils.saveSelectedPresidentsIDs(request);
Collection presidents = presidentsService.getPresidents();
request.setAttribute("presidents", presidents);
1.3.2. Form动作Controller
这个controller负责通过presidentIds得到数据集并重定向到下一个Jsp页面
Collection selectedPresidentsIds = SelectedPresidentsUtils.saveSelectedPresidentsIDs(request);
Collection selectedPresidents = SelectedPresidentsUtils.getSelectedPresidents(presidentsService.getPresidents(), selectedPresidentsIds);
request.setAttribute("selected", selectedPresidents);
request.getSession().removeAttribute(SelectedPresidentsConstants.SELECTED_PRESIDENTS);
1.3.3. 重新得到Checkbox的值
我将列出保存presidentIds到session的代码。我经常被问到如何重新得到eXtremeTable中form元素的值。 它的原理是设置form输入元素名字属性值前面加上一些东西来唯一标识元素
本示例中我关心的是以chkbx开头参数的元素。chkbx后面是唯一的关联到checkbox的presidentId。它被用来判断这个checkbox是否别选中。
public static Collection saveSelectedPresidentsIDs(HttpServletRequest request) {
Collection presidents = (Collection) request.getSession().getAttribute(SelectedPresidentsConstants.SELECTED_PRESIDENTS);
if (presidents == null) {
presidents = new ArrayList();
request.getSession().setAttribute(SelectedPresidentsConstants.SELECTED_PRESIDENTS, presidents);
}
Enumeration parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String parameterName = (String) parameterNames.nextElement();
if (parameterName.startsWith("chkbx_")) {
String presidentId = StringUtils.substringAfter(parameterName, "chkbx_");
String parameterValue = request.getParameter(parameterName);
if (parameterValue.equals(SelectedPresidentsConstants.SELECTED)) {
if (!presidents.contains(presidentId)) {
presidents.add(presidentId);
}
} else {
presidents.remove(presidentId);
}
}
}
return presidents;
}
分享到:
相关推荐
### eXtremeTable使用指南:深入理解与配置 #### 引言 eXtremeTable作为eXtremeComponents系列中的核心组件之一,专为高级数据展示而设计,尤其适用于表格形式的数据呈现。该开源项目由Jeff Johnston领导的ECCN...
总的来说,"eXtremeTable中文文档"是一份全面的指南,旨在帮助用户深入理解和使用eXtremeTable系统。无论你是初次接触还是经验丰富的开发者,这份文档都将是你探索和驾驭eXtremeTable的强大工具。通过阅读这份PDF,...
这个压缩包“eXtremeTable的使用方法.rar”显然包含了关于如何有效利用eXtremeTable的相关指南,特别是通过包含的CHM文件“2008821161857.chm”,我们可以期待找到详细的文档和教程。 eXtremeTable的主要特点包括:...
根据提供的文档部分内容,我们可以推断出这是一篇关于 eXtremeTable 的中文文档,主要涉及该工具或系统的使用、配置以及相关技术细节。虽然原始文本包含大量的特殊字符和不可读部分,但仍然可以从其中提取出一些关键...
我也刚开始看,感觉是个好东东,大家多多交流
**eXtremeTable** 是一个专为Java Web开发设计的高效、易用的表格控件,它在处理大量数据时表现出色,尤其在数据分页和导出...对于从事Java Web开发的人员来说,掌握eXtremeTable的使用无疑是提升项目质量的有效途径。
这篇博客文章将带你深入了解 ExtremeTable 的核心特性和应用场景,同时提供了一份详细的用户指南——《eXtremeComponentsCN.pdf》,帮助开发者更好地理解和运用这个工具。 首先, ExtremeTable 的主要特点是其高效...
eXtremeTable分页控件完整例子包括了数据的分页、数据的Excel格式导出、数据的pdf电子书格式导出、数据的文本文件格式导出等功能,里面的源代码写得非常详细,好好看一下.... 功能强大,易于扩展的extremetable就是个...
eXtremeTable文档 eXtremeTable文档 eXtremeTable文档 eXtremeTable文档 eXtremeTable文档 eXtremeTable文档
### extremeTable:强大的数据展示工具 #### 一、概述 **extremeTable**是一款开源的JSP自定义标签库,其主要功能是通过表格形式来高效地展示数据。这款工具的最新版本为1.0.1-M1。作为一款类似于`displaytag`和`...
《eXtremeTable参考文档》是针对eXtremeComponents中的一款核心组件——eXtremeTable的详细指南。eXtremeComponents是一个开源项目,它为JavaServer Pages (JSP) 开发者提供了丰富的定制标签库,使得在Web应用开发中...
本教程将详细讲解如何使用Hibernate ORM框架结合ExtremeTable实现高效的分页查询。 Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者以面向对象的方式处理数据库操作,避免了直接编写SQL语句的繁琐。而...
本教程详细介绍了eXtremeTable的配置、使用方法以及各种标签的功能,旨在帮助开发者充分利用其功能,实现高效、灵活的数据展示。 1. 配置 配置eXtremeTable需要满足以下先决条件: - Servlet 2.3或更高版本的服务器...
#### 四、使用指南 ##### 4.1 快速入门 - **创建数据模型**:定义要展示的数据结构。 - **配置eXtremeTable**:在JSP页面中使用`<ec:table>`标签配置表格。 - **展示数据**:通过指定数据源和列定义来展示数据。 - *...
displayTag,extremeTable相关文章
总的来说,Spring MVC、Hibernate和ExtremeTable的结合使用,为开发基于Web的数据库应用提供了高效且灵活的解决方案。Spring MVC负责请求分发和业务逻辑处理,Hibernate处理数据库操作,而ExtremeTable则在前端展示...