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