[jboss-user] [JBoss Seam] - selectManyMenu validation error
jonathan.shin
do-not-reply at jboss.com
Tue Mar 27 16:01:45 EDT 2007
I created EJB3 ManyToMany entities. User has a many to many relationship with Role. A user can have zero or more roles, and a role can have zero or more users. But, I?m getting validation error (?roles: Value is not a valid option?) when I clicked the ?Save? button.
User Entity:
| @Entity
| @Table(name = "User")
| public class User implements java.io.Serializable {
| ...
| @ManyToMany
| @JoinTable(name="User_Role",
| joinColumns=@JoinColumn(name="user_id", referencedColumnName="user_id"),
| inverseJoinColumns=@JoinColumn(name="role_id", referencedColumnName="role_id")
| )
| public List<Role> getRoles() {
| return this.roles;
| }
|
| public void setRoles(List<Role> roles) {
| this.roles = roles;
| }
| }
|
|
UserHome Object:
| @Name("userHome")
| public class UserHome extends EntityHome<User> {
|
| public void setUserUserId(Integer id) {
| setId(id);
| }
|
| public Integer getUserUserId() {
| return (Integer) getId();
| }
|
| @Override
| protected User createInstance() {
| User user = new User();
| return user;
| }
| ...
| public List<Role> getRoles() {
| return getInstance() == null ? null : new ArrayList<Role>(
| getInstance().getRoles());
| }
|
| }
|
Role Entity:
| @Entity
| @Name("role")
| @Scope(SESSION)
| @Table(name = "Role")
| public class Role implements java.io.Serializable
| {
|
| private int roleId;
|
| private String name;
|
| private List<User> users;
|
| public Role()
| {
| System.out.println("Default Constructor");
| }
| ...
| @Column(name = "NAME", length = 50)
| @Length(max = 50)
| @NotNull
| public String getName()
| {
| return this.name;
| }
|
| public void setName(String name)
| {
| this.name = name;
| }
|
| @ManyToMany(mappedBy = "roles")
| public List<User> getUsers()
| {
| return this.users;
| }
|
| public void setUsers(List<User> users)
| {
| this.users = users;
| }
| }
|
Converter:
| @Name("converters")
| public class Converters
| {
|
| @Transactional
| public Converter getRoleConverter() {
| return new Converter() {
|
| @Transactional
| public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) throws ConverterException
| {
| if (arg2 == null) {
| return null;
| }
| try {
| return ((EntityManager) Component.getInstance("entityManager")).find(Role.class, Integer.valueOf(arg2));
| } catch (NumberFormatException e) {
| throw new ConverterException("Cannot find selected Role", e);
| }
| }
|
| @Transactional
| public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) throws ConverterException
| {
| if (arg2 instanceof Role)
| {
| Role role = (Role) arg2;
| Integer tempId = (Integer) role.getRoleId();
| return tempId.toString();
| }
| else
| {
| return null;
| }
| }
|
| };
| }
| }
|
UserEdit.xhtml view:
| ...
| <h:outputLabel for="role">
| Roles
| </h:outputLabel>
| <s:decorate id="roleDecoration">
| <h:selectManyMenu id="roles" value="#{userHome.instance.roles}" size="5" converter="#{converters.roleConverter}">
| <s:selectItems value="#{roleList.resultList}" var="role" label="#{role.name}" noSelectionLabel="Please Select..." hideNoSelectionLabel="true"/>
| </h:selectManyMenu>
| </s:decorate>
| ...
| <h:commandButton id="save"
| value="Save"
| action="#{userHome.persist}"
| disabled="#{!userHome.wired}"
| rendered="#{!userHome.managed}"/>
| ...
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4032188#4032188
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4032188
More information about the jboss-user
mailing list