[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