Mapping DB Tables to DataTable
foxytown Jan 17, 2009 5:11 PMHi Everyone.
Could someone enlighten me on this. Please :(
BACKGROUND
The idea is pretty simple. Create a rich:dataTable (either static or dynamically) to show information saved on tables saved inside a DB. I cant create an XHTML page for each DB table, so i'm trying to create a "generic" dataTable that can load any info I send it.
PROBLEM
At this point I’m able to retrieve any info from any table inside the DB, but have come across the problem of showing this information in a dataTable Object.
1st approach
Does rich faces have something like this?
<ice:outputText value="#{value.getColumnValue(rowId,columnName)}"/>
I've already tried this but no good :(. I know it says ice, but is the an equivalent in rich?
2nd aproach
I've tried binding and creating and HTMLDataTable/UIDataTable. Only problem here is adding rows. Headers (columns names) are added correctly and dynamically. DataTable is expanded or contracted depending on the number of columns I add on the
HTMLDataTable/UIDataTable.
Problem is how to add each row of data to the column?
I'm using this as an example (taken from https://jira.jboss.org/jira/browse/RF-3364;jsessionid=9FEC6C30D3A56EA1A345E11CD49B1335?page=com.atlassian.jira.plugin.system.issuetabpanels%3Achangehistory-tabpanel)
String[] columns = new String[] { "number", "name" }; String[] valueExprs = new String[] { "#{data.number}", "#{data.name}" }; FacesContext facesContext = FacesContext.getCurrentInstance(); ELContext elContext = facesContext.getELContext(); Application application = facesContext.getApplication(); ExpressionFactory elFactory = facesContext.getApplication().getExpressionFactory(); dataTable = new HtmlDataTable(); dataTable.setValue(getTestData()); for (int i = 0; i < columns.length; i++) { log.info("setting column[" + i + "]: " + columns); // header HtmlOutputText header = new HtmlOutputText(); header.setValue(columns); // content HtmlOutputText content = new HtmlOutputText(); ValueExpression valueExpression = elFactory.createValueExpression( elContext, valueExprs, String.class); content.setValueExpression("value", valueExpression); // column HtmlColumn column = new HtmlColumn(); column.setId("col" + i); column.setHeader(header); column.getChildren().add(content); column.setSortBy(valueExprs); column.setSortable(true); column.setSelfSorted(true); dataTable.getChildren().add(column); } return dataTable; }
since DB number of columns increase of decrease depending on the table i'm consulting I cant use something like "#{bean.colum1}","#{bean.colum2}", and so on... because i don’t know how many rows are coming.
As a real life example of what I’m trying to do you can look at OracleXE web interface. When user selects a table, web interface loads table data into page expanding or contracting the "dataTable" where it been shown. That’s the sort of behaviour I’m trying to create
Could someone point me in the right direction to do this using rich:dataTable? Either statically (using rich tags) or dynamically (using HTMLDataTable/UIDataTable)
Thanks in advance :D