Matt RaibleMatt Raible is a Web Developer and Java Champion. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.

eXtremeTable - another table tag for sorting and paging

From the AppFuse mailing list and the Spring Forums, I learned about eXtremeTable. This JSP Tag looks similar to the Display Tag, except that it includes support for checkboxes and filtering columns out-of-the-box. If you've used this tag, please let me know how it's working for you.

eXtremeTable Demo

Posted in Java at Jul 11 2005, 07:33:47 AM MDT 26 Comments
Comments:

I used it.
It's nice, but it's very new, and I had some performance problems with it.
Besides, exporting didn't worked as easy as I expacted(and how I was used from DisplayTag).
IMHO DiplayTag is still the better choice and it should be improved not start thousends of forks or reimplementations. There's just too much abandonware on sourceforge, so maintaining another 'displaytag' it's a waste of resouces IMHO.

Posted by Ahmed Mohombe on July 11, 2005 at 01:58 PM MDT #

Cool, but have you seen the one posted by Joe on dwr mailing list a few time ago? It doesn't reload the page when you sort or filter data! ajax+dwr+Joe rulez;)

Posted by anonymous coward on July 11, 2005 at 05:00 PM MDT #

I was just gonna say how much cooler the filter would be if it used some ajax foo.

Posted by PJ on July 11, 2005 at 05:13 PM MDT #

And searching by more then one field seems to return the following

Posted by Thomas on July 12, 2005 at 08:44 AM MDT #

Hi,

As far as i see the examples in the extremeTable, it seems to be a good architecture from the point of filtering and custom cells and all. I have my own table model which do more or less the same as extremeTable..the data fetch is using the "limit" feature...in my case i m using Oracle heavily and using the rowcount and getting the total number of rows from count(*) seems to be a big problem in case i have very very complex(with many joins and sub-queries) query behind it.

I have never used display tag..but it seems to be a good choice for simple table displays and not for complex business applications...where one has same column floating around in different reports. One need to have custom column functionality to reuse over the pages. Well..it seems i have too many things to write..and i m going weird!

But Matt, your blog rocks.

regards, vicky

Posted by Vicky on July 13, 2005 at 11:09 AM MDT #

I spent yesterday trying some tests, in a few situations, putting an eXtremeComponents table in the same tile jsp's as a displaytag table, sharing the same collection. So far it appears that there are a few issues we have, with displaytag, that the eXtremeComponents table appears better on. One is the export filters and old WebLogic servers. For some reason, when a table is in a Tile, or just inserted by a jsp:include or even a RequestDispatcher.forward(), on an old WebLogic server where we have to deploy some external web applications, the displaytag ResponseOverrideFilter is prevented from working, by WebLogic. For some reason, when there is output from an included jsp in the response, it seems that WebLogic won't let the Filter get the Response and alter it. I think WebLogic is being too paranoid and disallowing something that is perfectly normal under j2ee (and I've seen other complaints around the web about pretty much the same thing, with no resolutions), servlet, jsp specs, but in the meantime we need a workaround. Previously we actually had to write extra jsp pages, to get around this. When a displaytag table, in a Tile, needed to provide exports, we had to disable the displaytag's actual "export" attribute, and instead provide a link to a version of the table, in a new jsp, that directly set the response content type (e.g. to Excel). Yet the ExportFilter of the eXtremeComponents table works fine in the exact same situation. I still haven't studied the code enough to see what the difference is. But in a test web app deployed on the old WebLogic server version, in a tile, with both a displaytag table and an eXtremeComponents table, with the export set to true for both tables, and both export Filters mapped to the test url, the displaytag one fails due to the filter response problem with WebLogic, but the eXtremeComponents export works fine. Also the eXtremeComponents offers PDF export out of the box, which is nice.

Posted by Chris Koenigsberg on July 13, 2005 at 02:12 PM MDT #

Other nice features of the eXtremeComponents table taglib include:
* Built-in column filtering (display subset of results, based on substring of column value).
* Better sorting out of the box, at least for dates and currency.
* Ability out of the box for the web user to change how many rows they can see on one page.
* Interfaces look cleaner at first glance, for plugging in different sorting, filtering, formatting.

Posted by Chris Koenigsberg on July 13, 2005 at 02:16 PM MDT #

Something that neither the displaytag table nor the eXtremeComponents table appear to do out of the box, without some hacking, is:

Display a column of integer numbers, so that, say, 9 precedes 1000, and so 9 is formatted as "___9" (leading blanks, and/or right justified, whichever), but so that they are still integers internally, and if used as parameters on links, they go as the right integer values e.g. "9" and not "___9".

Seems that with displaytag we need to write a table filter and mess with comparators, or with eXtremeComponents we need to subclass the sorter and formatter (to mess with comparators) and provide them as "callbacks".

But with eXtremeComponents they do handle dates and currency out of the box, re correct sorting and formatting, so why not integers?

(perhaps because the underlying NumberFormat/DecimalFormat, in java.text, do not have a way of specifying an integer "format" string indicating right-justified with leading blanks, e.g. so given 9 and 1000, the 9 is formatted as "___9" to align with, and sort before, the "1000"?)

Posted by Chris Koenigsberg on July 13, 2005 at 02:32 PM MDT #

Text alignment is handled easily enough by CSS.

Posted by 198.203.175.175 on July 15, 2005 at 08:02 PM MDT #

I created the eXtremeComponents, and I just wanted to say thanks for posting the eXtremeTable on your site. It is fun seeing my image posted somewhere else on the web. I also thought I would reply back to some of the posts.

I created eXtremeTable because I wanted a tag that was very customizable without sacrificing any performance. It took me a very long time and tons of refactoring, but I finally accomplished it and thought other people may enjoy it as well. The eXtremeTable is so flexible. If it does not do what you need you can just Implement the correct Interface and plug it in.

I never really thought about it, but I guess it does seem odd that this tag just kind of appeared out of nowhere. It has actually been in development for some time and for the people that have used it, it does not seem new at all. I only waited so long to tell other people because I wanted to be able to make it the best it could be. I have refactored and redesigned the eXtremeTable over and over getting to where I am completely happy with it. I guess that is a long way of saying that there is no fear of this becoming abandonware. I just wanted people to know that.

I also saw one person post that that the eXtremeTable has performance problems. I wish he would have elaborated because I encourage people to profile the tag and report their findings. The eXtremeTable is so lean and performs so well it barely shows up on a profiler.

Vicky raised a good point about having to use the count(*) to get the total row numbers when using the 'limit' feature. I'm still not sure what to call it, but I guess limit, or paging, or something like that is fitting. Anyway, the total is only used for display to the end user. In the eXtremeTable's terminology it is used in the View (HtmlView). In eXtremeTable views are pluggable so if you did not want to include the total then you would just have to modify the View and plug in your implementation. You can really make the eXtremeTable look however you want. Even with that though, after this next release, it is my plan to dissect the default View (HtmlView) and pull out what would be the common functionality between different potential views to make implementing your own custom table view even easier.

So, anyway, I sincerely hope people enjoy using the eXtremeTable as much as I have. It has been a lot of fun meeting and helping people at the eXtremeComponent forums!

-Jeff Johnston

Posted by Jeff Johnston on July 18, 2005 at 12:41 AM MDT #

[Trackback] The ExtremeTable component is avalaible from . There's also a demo available only. Just as a remainder : the other "contender" is <display:table> from the <display:*> tag library (see http://displaytag.sourceforge.net/) I haven't had the ...

Posted by Things to do in I.T. on July 20, 2005 at 12:46 PM MDT #

I have been using the display tag for a while now and custom column functionality can be achieved using a table decorator. The decorator is very useful in getting things done. I used the table decorator to have check boxes displayed as a coloumn on the search result display table and tied the functionality of deleting the particular line item onclick. Its nice to have such tags and I will be trying extremetable, thanks Jeff for all your hardwork.

Posted by Surender Taalla on July 25, 2005 at 01:54 PM MDT #

I am using Common-Controls (http://www.common-controls.com), they have awesome Tables and many more components. Check them out (no i am not affiliated with that company, i am just using it for my current project)

Posted by Marc Logemann on July 29, 2005 at 09:47 PM MDT #

Yo estoy usando DisplayTag y he empezado a tener problemas cuando manejo las ventas de cada mes de un año, para alrededor de 13,000 articulos, matriz de 13,000 renglones * 14 columnas. Alguien ha usado eXtremeComponents para un volumen de datos similar con buenos resultados? I´m read english but no writing very well. Excuse me.

Posted by Luis on September 14, 2005 at 05:01 PM MDT #

When recently looking for an open-source datagrid, I checked here and found the link to the eXtremeTable. I would have sticked to the fine display tags, but as things happen, I had to present 'link' data with two or more parameters involved, some of them conditional (JSTL <c:if test=${...}>) and so on. So after spending some time on TableDecorators, I realized the display tags just wouldn't fit my needs in this case, and had a closer look at the eXtremeTable. To cut it short, I'm still impressed. Oh no, this hopefully is NOT SF abandonware (Jeff said so!) :-)

The eXtremeTable really lives up to its supposedly pretentious naming. It's extremely configurable indeed, no option missing, but also works right out of the box. You can place virtually anything you like between those <ec:column> tags, even complex JSTL statements, and it will be content. It's fast, and it even looks good (avoiding 'sexy' here); you can fully customize the overall appearance via CSS. Looking at the code (I always do), you'll instantly recognize this is a Pro's work. Good design, very clean code. Hm. I think, I just love it. But see for yourself; it's worth it. Quote me on that :-)

-- Chris.

Posted by Chris on September 27, 2005 at 07:01 PM MDT #

The link on sourceforge to eXtremeComponents is https://sourceforge.net/project/showfiles.php?group_id=108168.

Currently the http://extremecomponents.org site is down. My hosting company (http://lunarpages.com/) did not want me to use the Spring Framework anymore and just shut me down. I am pretty disgusted as I was not taking up any resources, and they just did it out of ignorance of what the Spring Framework is. I found a hosting company (http://eapps.com/) that I like even more and will be paying for a better plan. I get my own JVM and even have root access to my slice of the server. Unfortunately there is nothing I can do except wait for my account to be set up, the DNS to take effect, ect...

I have been working on some really nice changes the past week though. I plan on releasing another milestone this month that is more or less a code refactoring that will make working with the eXtremeTable even easier. Especially people using the Pagination feature are going to love the new way of interacting with the eXtremeTable!

-Jeff Johnston

Posted by Jeff Johnston on October 02, 2005 at 11:21 AM MDT #

<em>> When recently looking for an open-source datagrid, I checked here and found the link to the eXtremeTable. I would have sticked to the fine display tags, but as things happen, I had to present 'link' data with two or more parameters involved, some of them conditional (JSTL ) and so on.</em>

It's actually pretty easy to use two parameters in a link w/ the display tag - just give the column a body.

<pre style="margin-top: 10px"> <display:table id="foo"...> <display:column sortProperty="bar"> <a href="<c:url value="/edit.html?id=${foo.id}&amp;name=${foo.name}"/>">Edit</a> </display:column> ...

Posted by Matt Raible on October 04, 2005 at 04:36 PM MDT #

Hi, Can anyone give me a full idea of how to implement extremecomponents using struts framework. Regards, Jyoti

Posted by Jyoti on November 22, 2005 at 09:54 AM MST #

I am sending the below code i want to use a link for a particular column.How to use it.can u please send the information about this as quickly as possible

<%@ taglib uri="/WEB-INF/extremecomponents.tld" prefix="ec" %>
<%@ page import="org.extremecomponents.test.*" %>
<%@ page import="org.extremecomponents.table.filter.*" %>
<%@ page import="java.util.*" %>
<%@ page import="net.sigmainfo.idenizen.util.common.*" %>
<%@ page import="net.sigmainfo.idenizen.util.db.Queries" %>
<%@ page import="net.sigmainfo.idenizen.util.db.*" %>

<%
int[] linkfldIdx={2,3,4,5};
String[] field={"USER_ID","USER_NAME","PASSWD","USER_ENGINE"};
int[] hiddenFields ={1,3}; 
int[] dropOption = {2,4};
%>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="../css/extremecomponents.css"></link>
    <title>eXtremeComponents</title>	
</head>

<%
ReadProperties rp = new ReadProperties();
String DATABASE_DRIVER = rp.getValue("DATABASE_DRIVER");
String CONNECTION_URL= rp.getValue("CONNECTION_URL");
String dbName=rp.getValue("DATABASE_NAME");
String companyName=rp.getValue("COMPANY_NAME");
RecordSelector recordSelector = new RecordSelector();

/* STATE INFRA */
String stateInfraDetails = "SELECT USER_ID,USER_NAME,PASSWD,USER_ENGINE FROM USER_DETAILS";

 //java.util.Map stateDetail = new java.util.HashMap();  
 //stateDetail = recordSelector.fireQuery(stateInfraDetails);

ArrayList stateDetails = recordSelector.fireQuery(stateInfraDetails,1);
%>

<%request.setAttribute("pres",stateDetails); %>
<%

//karthicks code

String link = "http://www.whitehouse.gov/history/presidents/"+"karthick";
%>

<body style="margin:25px;">

	<br>
	<ec:table 
		var="pres"
		items="pres"
		action="../jsp/test.jsp"
		imagePath="../images/table/*.gif"
		title="Extremecomponents Table Generation"
		width="90%"
		rowsDisplayed="4"
		>
	 <ec:exportPdf 
       fileName="output.pdf" 
       tooltip="Export PDF" 
       headerColor="black"
       headerBackgroundColor="#b6c2da" 
       headerTitle="User Details"/>
    <ec:exportXls 
       view="xls" 
       fileName="output.xls" 
       tooltip="Export Excel"/>
		<ec:row>
			<%
				boolean flag=false;
				boolean searchFlag = false;
				for(int i=0;i<field.length;i++){	
					searchFlag = false;
					//Hidden block
					flag=false;
//					for(int h=0;h<hiddenFields.length;h++){		
//						if((i+1)==hiddenFields[h]){
//							flag=true;	
//							break;
//						}					
//					}					
		//			System.out.println("The value of Flag::::::::::::" + flag);
			//		if(flag) continue;
					//Searching block
					for(int count=0;count<dropOption.length;count++){
						if((i+1)==dropOption[count]){
							searchFlag = true;
							break;
						}
					}
						if(searchFlag){	
					%>       
						<ec:column 
						property="<%=field[i]%>" 
						filterable="false" 
						/>

					<%}else{%>
						<ec:column 
						property="<%=field[i]%>" 
						filterable="true" 
						filterCell="droplist"
						/>
					<%}%>	
<%				}%>
 		</ec:row>
	</ec:table>
<br>
</body>
</html>

Posted by kishore on June 29, 2006 at 12:28 PM MDT #

The website http://extremecomponents.org/ seems to be down. Is there any other place where I can read the documents and tutorials for extreme table.

Posted by Arpan Shah on January 09, 2007 at 05:47 PM MST #

Hi, I have a client requirement something like this. 1 Records must be with a check box to select few records for editing. 2 After clicking on 'Edit' button, I have to enable those selected records for editing at the same place while others are read only. Can this be achievable with extremecomponents? If yes, where can i get the help?

Posted by Lavanya on July 17, 2007 at 04:23 AM MDT #

In my table column i have given format as "#,##00.00" & it works fine with english as in english in decimla we use "." But when i change my browser language to french in whcih they use , instead of . it gives error in this column. Please help me to resolve this issue. Thanks in advance. Regards, Naman

Posted by Naman on January 22, 2008 at 06:13 AM MST #

I'm starting to use the extremetable components.

I already created a table that allows me to scroll through and filtrer data.
It works fine.

My JSP page invokes two different actions.
First Action is SearchAction with corresponding SearchForm.

That action fills up ArrayList with the data and displays it using extremetable.

Second Action is GeneralAction and invoked when selecting a particular record, and adding/editing the record.

I already have this two Actions working fine.

I have two problems I'm working on for a couple of days and do not seem to have any progress solving them. Problems are following:

1. I have let's say a 100 of records, and display only n number of records per page. Now, suppose I scrolled away from the first set of data and clicked on the row I want to change. I keep coming back to the first set of records(first n records).

I figured that out by setting the state to "persist".
That allows me to stay at the same screen when clicking on the raw.
However, that works only if I do not select the number of record to display from dropdown list.
After doing that, I keep getting the selected number of rows specified by dropdown option no matter what I do.

However, when clicking on "Search" and invoking the SearchAction, state does not change and it brings me back to the same set of rows where I was selecting the record for edit until I click one of the scroll buttons on the table.

I think I specified all the issues I'm facing right now.

If anyone can help me and point out on what I'm doing wrong.

Thank you

Posted by Eugene Gruzin on May 06, 2008 at 03:50 PM MDT #

Lavanya , is your problem solved. if yes then please let me know how to solve that problem since i am also facing the same problem of how to edit a record in extremecomponents

Posted by Sam on June 06, 2008 at 05:14 AM MDT #

Hi I have used extreme table in the year 2006 its very good easy to use and every thing was just perfect. But i was trying to use extreme table in my new project .But i was not able to access the extreme component site and also not able to send any mail to Jeff.Please let me know if the site is updated.I will be thank ful to you.

Posted by Sonia Jain on February 17, 2009 at 08:15 AM MST #

Hi,

I am getting problem in Excel export functionality of extremecomponets.

When I click on export, I entire un-formatted data is rendered on the screen...

 <ec:table tableId="test1" items="testList" var="testList" scope="page" action="test.do"
	cellpadding="1" cellspacing="2"
	rowsDisplayed="100" showExports="true"  >
			  
<ec:exportXls fileName="testList.xls" view="xls" tooltip="Export Excel" />

Please help........

Posted by Saurabh on October 09, 2012 at 02:05 PM MDT #

Post a Comment:
  • HTML Syntax: Allowed