[jboss-user] [JBoss Seam] - Finding an entity using a non- at Id unique identifier

uke do-not-reply at jboss.com
Wed Aug 22 05:28:46 EDT 2007


Hi!

I'm using an EntityHome-object which I'm using to view Employees on a viewEmployee.xhtml page, using  in pages.xml with no problems.

My problem now is that I want to use viewEmployee.xhtml to view an Employee based on a unique employement-number instead, and that's where I run into problems.

This is my current attempt, where I first find the corresponding id, and then try to load viewEmployee.xhtml the usual way:

(foo.xhtml)

  | <h:form>
  |     <h:inputText id="employmentNumber" value="#{employmentNumber}"/>
  |     <h:commandButton id="find" value="Find" action="#{employeeDao.findByEmploymentNumber}"/>
  | </h:form>
  | 

(components.xml)

  | <fwk:entity-query name="employeeIdByEmploymentNumber"
  |                   entity-manager="#{entityManager}"
  |                   ejbql="select e.id from Employee e">
  |     <fwk:restrictions>
  |         <value>employmentNumber = #{employmentNumber}</value>
  |     </fwk:restrictions>
  | </fwk:entity-query>
  | 

(EmployeeDao.java (Extends EntityHome))

  | public String findByEmploymentNumber() {
  |     EntityQuery eQuery = (EntityQuery)Component.getInstance("employeeIdByEmploymentNumber");
  |     Long l = null;
  |     if(eQuery.getResultCount() > 0)
  |         l = (Long)eQuery.getSingleResult();
  |     if(l != null) {
  |         setId(l);
  |         return "found";
  |     } else {
  |         facesMessages.add("Not found!");
  |     }
  |     return "";
  | }
  | 

(pages.xml)

  | <page view-id="/foo.xhtml"> 
  |     <navigation from-action="#{employeeDao.findByEmploymentNumber}">
  |         <rule if-outcome="found">
  |             <redirect view-id="/viewEmployee.xhtml">
  |                 <param name="employeeId" value="#{employeeDao.id}" converterId="javax.faces.Long"/>
  |             </redirect>
  |         </rule>
  |     </navigation>
  | </page>
  | 

The id is a Long, and the employmentNumber is a String.

This all works, except that I get LazyInitializationExceptions in viewEmployee.xhtml when trying to render connected entities. If I just reload the "An Error Occurred:"-page, though, everything works perfectly. So somehow, my solution closes the session that I'm keeping the Employee in.

I'm not sure if this is a good solution for this at all, so any help or suggestions would be greatly appreciated. :)
/uke

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

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



More information about the jboss-user mailing list