I am trying to validate a list of entry by using the EntityManager to query the 
database to check limits.  I can also see myself using this for a list of
tracking numbers like on UPS as well.  For each I would like to hit the DB and 
see if it meets my criteria and give a meaninful message to the user next to 
each field.  I have this working and the EntityManager is accessable from my 
Converter, but I need additional information besides this value to do my checks 
in this case.  It is present in the DataModel that this field is coming from, 
but I am unsure of the best way to get accesss to this once inside the 
converter.  Any advice would be greatly appreciated.

As a minimum for this case I need to know the pk of the item in question so I 
can check its balance in the DB.

I have posted both the Java and Facelets code below with some comments.

Java Code

  | @Stateless
  | @Name("genericItemNumPieces")
  | @Interceptors(SeamInterceptor.class)
  | public class GenericItemNumPiecesConverterBean implements 
GenericItemNumPiecesConverterInterface
  | {
  |   @Logger private Log log;
  |   
  |   @PersistenceContext
  |   EntityManager em;
  | 
  |   public Converter getConverter() {
  |     return new GenericItemNumPiecesConverter(em, log);
  |   }
  | 
  |   public static class GenericItemNumPiecesConverter implements Converter {
  |     
  |     private EntityManager em;
  |     private Log log;
  |     
  |     public GenericItemNumPiecesConverter(EntityManager em, Log log) {
  |       this.log=log;
  |       this.em=em;
  |     }
  | 
  |     public String getAsString(FacesContext facesContext, UIComponent 
component, Object obj) {
  |       if (obj == null) return null;
  |       Long numPieces = (Long) obj;
  |       String val = Long.toString(numPieces);
  |       return val;
  |     }
  | 
  |     public Object getAsObject(FacesContext facesContext, UIComponent 
component, String str)
  |                   throws ConverterException {
  |       // This is just to test the log and entity manager.
  |       // But I need to access the row of the datatable this component is in
  |       // so that I can verify the quantity.
  |       List list = em.createQuery("from Size s").getResultList();
  |       log.info("There are " + list.size() + " sizes");
  |       
  |       // Check if the value entered is parsable as a Long.  If not it 
throws ConverterException
  |       Long numPieces = parseLong(str);
  |       
  |       // Check if quantiy is positive. 
  |       if (numPieces < 0) throwConverterException();
  |       
  |       // What I would like to do here is verify against the DB to see if 
the quantity is <= the number
  |       // of pieces available and throw new ConverterException(new 
FacesMessage("The number of pieces must be <= X"))
  |       // How can I access the row from the datatable that this component is 
located in so that I can 
  |      // check the quantity for the proper line item?
  |       return numPieces;
  |     }
  |   }
  |   
  |   private static Long parseLong(String str) {
  |     Long numPieces = null;
  |     try {
  |       numPieces = Long.valueOf(str).longValue();
  |     } catch (NumberFormatException e) {
  |       throwConverterException();
  |     }
  |     return numPieces;
  |   }
  |   
  |   private static void throwConverterException() {
  |     throw new ConverterException(new FacesMessage("The number of pieces 
must be >= 0."));
  |   }
  | }
  | 

Facelets code
  <t:dataTable id="#{dataTableId}" 
  |                var="couplingL" 
  |                rowIndexVar="rowIndex"
  |                rows="20" preserveSort="true"
  |                value="#{couplingList}">
  |     <t:column styleClass="paddlr alignr">
  |       <f:facet name="header">Qty Rec</f:facet>
  |       <h:inputText id="recList_#{rowIndex}"
  |                    value="#{couplingL.numPiecesInput}" 
  |                    converter="#{genericItemNumPieces.converter}" />
  |       <h:messages for="recList_#{rowIndex}" />
  |     </t:column>
  |   </t:dataTable>
  | 

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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3954854

Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to