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

smithbstl do-not-reply at jboss.com
Tue Jul 17 10:08:26 EDT 2007


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



More information about the jboss-user mailing list