Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » JBoss User Help »

[jboss-user] [JBoss Seam] - Re: Recommended way of using Select
 boxes - The Seam Way

scott.stark@jboss.org

2007-07-17


No, landmarkType does not have a value when fillLandmarkList() is called on initial page load. Since fillLandmarkList is an @Factory method, it is called as soon as the page loads, no landmarkType has been selected from the Select box yet.

I fixed the error message but still don't really understand the "why" yet.

Here is my new code

@Factory("landmarkList")
| public void fillLandmarkList() {
|  if (landmarkType.getLandmarkTypeId() != null) {
|    if (!(entityManager.contains(landmarkType))) {
|      landmarkType = entityManager.getReference(LandmarkType.class, landmarkType.getLandmarkTypeId());
|    }
|    landmarkList = (List) landmarkType.getLandmarkCollection();
|  } else {
|    landmarkList = entityManager.createQuery("SELECT l from Landmark l ORDER BY l.landmarkName").getResultList();        
|  }  
| }

It seems that landmarkType is instantiated by Seam when the page loads because of the reference to #{landmarkType} in the SelectOneMenu. It is instantiated to a new landmarkType with null values in its elements. I think that is why I was getting a Transient object exception, because Hibernate thought it was a newly created entity that has not been persisted yet.

I am on track here?

I just don't understand why Seam is creating the landmarkTypecomponent in the first place. It does not specify a create=true in the declaration.

@In(required=false)
| private LandmarkType landmarkType;
|

Am I approaching this properly?

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

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4065017
_______________________________________________
jboss-user mailing list
jboss-user@(protected)
https://lists.jboss.org/mailman/listinfo/jboss-user
©2008 junlu.com - Jax Systems, LLC, U.S.A.