Okay, I think I'm starting to figure things out. However, now I'm having 
problems with a one to many relationship. Here are some source snippets...

(from User.java)

   @NotNull @ManyToOne @JoinColumn(name="Id", nullable=false)
   public Role getRole()
   {
           return role;
   }
   
   public void setRole(Role role)
   {
           this.role = role;
   }

(from Role.java)

@Entity
@Name("role")
@Scope(EVENT)
@Table(name="roles")
public class Role implements Serializable
{
        private String name;
        private Integer id;
        
        public Role(String name, Integer id)
        {
                this.name = name;
                this.id = id;
        }
        
        public Role() {}
        
        @Id @GeneratedValue 
        public Integer getId() {
                return id;
        }
                
        public void setId(Integer id) {
                this.id = id;
        }

        @NotNull @Length(min=1, max=15)
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        
        public String toString() 
        {
           return "Role(" + name + ")";
        }
}

(from YaRBImpl.java)

@Stateful
@Name("yarb")
@Scope(APPLICATION)
@Interceptors(SeamInterceptor.class)
public class YaRBImpl implements YaRB 
{
        List roles;
        Map<String,Role> roleMap;
        
        @PersistenceContext
        EntityManager em;
        
        @Create
        public void loadData() 
        {
                roles = em.createQuery("from Role r").getResultList();
                
                Map<String,Role> results = new TreeMap<String,Role>();
                
                for(Role role: roles)
                {
                        results.put(role.getName(), role);
                }
                roleMap = results;
        }
        
        public Map<String,Role> getRoles()
        {
                return roleMap;
        }
        
        public Converter getConverter()
        {
                return new RoleConverter(roles);
        }
        
        public Role getNullRole()
        {
                return new Role();
        }
        
        static public class RoleConverter implements Converter, Serializable 
        {
                List roles;
                
                public RoleConverter(List roles)
                {
                        this.roles = roles;
                }
                
                public String getAsString(FacesContext facesContext, 
UIComponent component, Object obj) throws ConverterException
                {
                        if (obj == null) return null;
                        
                        return String.valueOf(((Role) obj).getId());
                }
                
                public Object getAsObject(FacesContext facesContext, 
UIComponent component, String str) throws ConverterException
                {
                        if(str == null || str.length()==0) return null;
                        
                        Integer id = new Integer(str);
                        for (Role role: roles)
                        {
                                if(role.getId().equals(id))
                                {
                                        return role;
                                }
                        }
                        
                        return null;
                }
        }
}

(from SSBImpl.java)
@Stateless
@Name("ssb")
@Interceptors(SeamInterceptor.class)
public class SSBImpl implements SSB
{
        @In(required=false) @Valid
        private User user;
        
        @In(required=false) @Valid
        private Role role;
        
        @PersistenceContext
        private EntityManager em;
           
        @IfInvalid(outcome="index")
        public String invoke()
        {
                List existing = em.createQuery("select username from User where 
username=:username").setParameter("username", 
user.getUsername()).getResultList();
                if(existing.size()==0)
                {
                        em.persist(user);
                        return "go";
                }
                else
                {
                        return "oops";
                }
        }
        
        @IfInvalid(outcome="role")
        public String createRole()
        {
                List existing = em.createQuery("select name from Role where 
name=:name").setParameter("name", role.getName()).getResultList();
                if(existing.size()==0)
                {
                        em.persist(role);
                        return "bob";
                }
                else
                {
                        return "role";
                }
        }
}

(from index.xhtml)

           <h:selectOneListbox value="#{user.role}" 
converter="#{yarb.converter}">
             <f:selectItems value="#{yarb.roles}"/>
           </h:selectOneListbox>
     <h:messages/>
     <h:commandButton type="submit" value="Submit" action="#{ssb.invoke}"/>
     <h:commandButton type="submit" value="Search" 
action="#{userlist.listUsers}"/>
   </h:form>

It lists my roles correctly, and I can see that my converter is actually 
returning a role object when I try and submit the form. However, it's just 
returning me to index.xhtml with a rather generic validation error. If I 
comment out the snippet from index.xhtml that I provided above, it works, but I 
don't get any role (obviously). What am I doing wrong?

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

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


-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to