[jboss-user] [JBoss Seam] - Semantics of @Name, @DataModelSelection

djfjboss do-not-reply at jboss.com
Mon Oct 1 12:37:02 EDT 2007


In an attempt to learn Seam I am experimenting with a simple CRUD example, partly based on the Yuan/Heute book.

The integration example shows an edit link as:
<a href="person.seam?pid=#{fan.id}">Edit</a>

With the Person class having:
@Entity
  | @Name("person")
  | public class Person {
  |   private long id;
  |   @Id @GeneratedValue
  |   public long getId() { return id;}
  |   public void setId(long id) { this.id = id; }

and person.xhtml having:
<h2>Edit #{person.name}</h2>
  | <h:form>
  | <input type="hidden" name="pid"
  |        value="#{person.id}"/>

and the ManagerAction class having:
@Stateful
  | @Name("manager")
  | public class ManagerAction implements Manager {
  | 
  |   @In (required=false) @Out (required=false)
  |   private Person person;
  | 
  |   // @RequestParameter
  |   Long pid;
  | 
  |   @DataModel
  |   private List <Person> fans;
  | 
  |   @DataModelSelection
  |   private Person selectedFan;
  | 
  |   public void setPid (Long pid) {
  |     this.pid = pid;
  |     
  |     if (pid != null) {
  |       person = (Person) em.find(Person.class, pid);
  |     } else {
  |       person = new Person ();
  |     }
  |   }
  |   
  |   public Long getPid () {
  |     return pid;
  |   }


Apologies for taking so long to get to the point but the issue I have is that I keep getting property X not found on type Y.  I had assumed that a Person instance would be maintained in the session state and injected/outjected as appropriate.

I had also assumed that the setPid method would be invoked via the edit link and thereby set person to the appropriate entity via the id, but this method isn't even called for me.  The fact that the RequestParameter annotation is commented out is a little disconcerting.

To make this work, up to a point, I have had to add @Scope(SESSION) to the entity and session beans but I still find that I am faced with a newly constructed Person instance rather than the one I thought I was operating on and that had been outjected into the shared context.

In desperation, I've also tried using the @DataModelSelection but without success - property not found again.

I suspect I'm missing something fundamental and have read about bijection and studied the example which look straightforward enough but something is missing and I can't figure out what it is!



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

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



More information about the jboss-user mailing list