I've followed the instructions on 
http://wiki.jboss.org/wiki/Wiki.jsp?page=DataModelWithTomahawkDataTable to 
create a database backed table of objects that is sortable on each of the 
column headers.

This worked great after a bit of plundering. However, I wanted to try out some 
of the seam functionality and annotated the "column" and "ascending" variables 
setters and getters with @In and @Out. I then replaced setAscending to take a 
java.lang.Boolean. In both setAscending and setColumn I checked for null and 
just returned if it was passed to the method. Lastly, I replaced the facelet 
codes t:dataTable sortColumn="#{managerBean.column}" with 
sortColumn="#{column}" and sortAscending="#{managerBean.ascending}" with 
sortAscending="#{ascending}", trying to access the seam in- and outjected 
variables instead of doing it via the managerBean. I also printed column and 
ascending below the table.

When I pointed my browser at the facelet, setColumn and setAscending was called 
with null values (half expected this). Then the getters was called, returning 
the values I had set in the managerBean. To my surprise, the table was not 
sorted! I clicked the headers of the columns but the setter methods of the 
managerBean was not called at all. Waiting a while (3-5 minutes), the setters 
were called but the columns where not sorted. More clicking did call the 
setters at once and the columns where sorted, and even more clicking didn't.

I'm not quite sure if I've used the in- and outjection correctly. Any comments 
would be very welcome.

Attached is the code for the managerBean and the facelet. Other code/config 
available on request.

home.xhtml


  | <!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:t="http://myfaces.apache.org/tomahawk";>
  | <head>
  |     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" 
/>
  |     <title>IWDB: The Worlds Largest Wine Database</title>
  |     <link href="css/screen.css" rel="stylesheet" type="text/css" />
  | </head>
  | <body id="pgHome">
  | <f:view>
  | <div id="document">
  |     <div id="header">
  |             <div id="title"><img src="img/hdr.title.gif" alt="IWDB: 
Internet Wine Database"/></div>
  |     </div>
  |     <div id="container">
  |             <div id="sidebar">
  |                     Here comes the search page
  |             </div>
  |             <div id="content">
  |                     <div class="section">
  |                             
  |                         <h1>List of wines</h1>
  |                         
  |                         <p>
  |                            The list of the currently available wines
  |                 </p>
  |                             
  |                             <div class="section">
  |                                     <h:outputText value="No wines 
registered yet" rendered="#{wines.rowCount==0}"/>
  |                                     <h:form>
  |                                             <t:dataTable var="wn"
  |                                                     value="#{wines}"
  |                                                     renderedIfEmpty="false"
  |                                                     sortColumn="#{column}"
  |                                                     
sortAscending="#{ascending}"
  |                                                     preserveSort="true">
  |                                                     <h:column>
  |                                                             <f:facet 
name="header">
  |                                                                     
<t:commandSortHeader columnName="name" arrow="true">
  |                                                                             
<h:outputText value="Name"/>
  |                                                                     
</t:commandSortHeader>
  |                                                             </f:facet>
  |                                                             <h:outputText 
value="#{wn.name}"/>
  |                                                     </h:column>
  |                                                     <h:column>
  |                                                             <f:facet 
name="header">
  |                                                                     
<t:commandSortHeader columnName="country" arrow="true">
  |                                                                             
<h:outputText value="Country"/>
  |                                                                     
</t:commandSortHeader>
  |                                                             </f:facet>
  |                                                             <h:outputText 
value="#{wn.country}"/>
  |                                                     </h:column>             
                        
  |                                                     <h:column>
  |                                                             <f:facet 
name="header">
  |                                                                     
<t:commandSortHeader columnName="vinyard" arrow="true">
  |                                                                             
<h:outputText value="Vinyard"/>
  |                                                                     
</t:commandSortHeader>
  |                                                             </f:facet>
  |                                                             <h:outputText 
value="#{wn.vinyard}"/>
  |                                                     </h:column>     
  |                                             </t:dataTable>
  |                                     </h:form>
  |                                     <div><h:outputText 
value="#{column}"/></div>
  |                                     <div><h:outputText 
value="#{ascending}"/></div>
  |                             </div>
  |                     </div>
  |             </div>
  |     </div>
  |     <div id="footer">Created by stEir</div>
  | </div>
  | </f:view>
  | </body>
  | </html>
  | 

WineManagerBean.java


  | package com.steir.iwdb;
  | 
  | import static javax.persistence.PersistenceContextType.EXTENDED;
  | import static org.jboss.seam.ScopeType.SESSION;
  | 
  | import java.io.Serializable;
  | import java.util.Collections;
  | import java.util.Comparator;
  | import java.util.List;
  | 
  | import javax.ejb.Remove;
  | import javax.ejb.Stateful;
  | import javax.persistence.EntityManager;
  | import javax.persistence.PersistenceContext;
  | 
  | import org.jboss.seam.annotations.Destroy;
  | import org.jboss.seam.annotations.Factory;
  | import org.jboss.seam.annotations.In;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Out;
  | import org.jboss.seam.annotations.Scope;
  | import org.jboss.seam.annotations.datamodel.DataModel;
  | import org.jboss.seam.annotations.datamodel.DataModelSelection;
  | 
  | @Stateful
  | @Scope(SESSION)
  | @Name("wineManager")
  | public class WineManagerBean implements Serializable, WineManager {
  | 
  |     private String column;// = "name";
  |     private boolean ascending;// = true;
  |     
  |     @DataModel
  |     private List<Wine> wines;
  |     
  |     @DataModelSelection
  |     @Out(required=false)
  |     private Wine wine;
  |     
  |     @PersistenceContext(type=EXTENDED)
  |     private EntityManager em;
  |    
  |     @Factory("wines")
  |     public void findWines() {
  |             wines = em.createQuery("select wn from Wine 
wn").getResultList();
  |             sort(wines);
  |     }
  | 
  |     public void select() {
  |     }
  |    
  |     public void delete() {
  |             if (wine!=null) {
  |               wines.remove(wine);
  |               em.remove(wine);
  |               wine=null;
  |             }
  |     }
  | 
  |     @Out(required=false)
  |     public boolean isAscending() {
  |             return ascending;
  |     }
  |     
  |     @In(required=false)
  |     public void setAscending(Boolean ascending) {
  |             if (ascending == null) return;
  |             if ( ascending!=this.ascending ) wines=null;
  |             this.ascending = ascending;
  |     }
  | 
  |     @Out(required=false)
  |     public String getColumn() {
  |             return column;
  |     }
  | 
  |     @In(required=false)
  |     public void setColumn(String column) {
  |             if ( column == null ) return;
  |             if ( !column.equals(this.column) ) wines=null;
  |             this.column = column;
  |     }
  |     
  |     private void sort(List<Wine> data) {
  |             Collections.sort(data, new Comparator<Wine>() {
  |                     public int compare(Wine x, Wine y) {
  |                             if (!ascending) {
  |                                     Wine temp = y;
  |                                     y = x;
  |                                     x = temp;
  |                             }
  |                             if ("name".equals(column)) {
  |                                     return 
x.getName().compareTo(y.getName());
  |                             }
  |                 if ("country".equals(column))
  |                 {
  |                    return x.getCountry().compareTo(y.getCountry());
  |                 }
  |                             else {
  |                                     return 
x.getVinyard().compareTo(y.getVinyard());
  |                             }
  |                     }
  |             });
  |     }
  |     
  |     @Remove @Destroy
  |     public void destroy() {}
  | }
  | [/url]

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4012212#4012212

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4012212
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to