2013-10-11 3 views
0

저녁!selectonemenu 및/또는 selectmanymenu를 사용하여 JSF의 <Collection>에 엔티티 추가

권한 부여를 위해 Users 엔터티를 그룹 엔터티와 관련시키는 조인 테이블 (User-Groups)이 포함 된 DB 구조가 있습니다. 이것은 다 대다 관계입니다 (사용자는 소유자 임). 다음 팁은 다른 게시물의 BalusC에서 제공 한 힌트 &입니다. SelectItemsConverter 사용자 정의 변환기를 사용하여 그룹 엔티티의 드롭 다운을 올바르게 채울 수있게 해주는 Omnifaces 프레임 워크에서 제공하지만 올바른 구문을 알 수는 없습니다. Users 엔티티가 보유한 Groups에이를 추가하십시오. 상황이 진행됨에 따라 코드는 그룹 엔터티를 a와 함께 터미널 결과로 변환하려고 시도합니다! 약간의 파기가 끝나면 어떻게 든 참조에 바인딩 할 필요가 있는지 궁금하네요. 그러면 양식이 제출 될 때 Groups Add 메서드에 대한 참조를 전달합니다. 그러나 이것은 조금 서투른 것으로 보이고 아무것도 찾을 수 없습니다. 그건 내 이론을 확인해줍니다. 포인터 누구?

사용자 개체 :

@Entity 
@Table(name = "Users") 
@XmlRootElement 
... 
public class Users implements Serializable { 
... 
    @JoinTable(name = "User_Groups", joinColumns = { 
     @JoinColumn(name = "User_ID", referencedColumnName = "User_ID")}, inverseJoinColumns = { 
     @JoinColumn(name = "Group_ID", referencedColumnName = "Group_ID")}) 
    @ManyToMany 
    private Collection<Groups> groupsCollection; 
... 

그룹 엔티티 :

@Entity 
@Table(name = "Groups") 
... 
public class Groups implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "Group_ID") 
    private Integer groupID; 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 20) 
    @Column(name = "Group_Name") 
    private String groupName; 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 200) 
    @Column(name = "Group_Desc") 
    private String groupDesc; 
    @ManyToMany(mappedBy = "groupsCollection") 
    private Collection<Users> usersCollection; 
... 

코드 조각에서 사용자 JSF 페이지를 생성합니다 selectManyCheckbox, H :

난 당신이 필요로하는 무슨 생각
... 
<h:outputLabel value="#{bundle.CreateUsersLabel_groups}" for="groupsCollection" /> 
<h:selectOneMenu id="groupsCollection" value="#{usersController.selected.groupsCollection}" title="#{bundle.CreateUsersTitle_groups}" converter="omnifaces.SelectItemsConverter"> 
    <f:selectItems value="#{groupsController.itemsAvailableSelectOne}" /> 
</h:selectOneMenu> 
... 
+0

'h : selectOneMenu'를 올바르게 사용하지 않았습니다. 이 컴포넌트는 당신이 가장하는 컬렉션이 아닌 단일 선택을 반환합니다 ('# {usersController.selected.groupsCollection}'). –

+0

공정한 포인트. 나는 분명히 잘못된 것을하고 있는데, 대신 무엇을 사용해야합니까? 하나 이상의 (또는 그 이상의) 그룹 엔터티가있는 사용자 필드의 Collection 속성을 채워야합니다. SelectOneMenu (또는 대안)는 콜렉션이 아닌 이러한 엔티티로 채워 져야합니다. – rustproofFish

답변

0

가 아 : selectManyListbox 또는 h : selectManyMenu, 여러 그룹을 동시에 선택하여 연관시킬 수있는 모든 것 귀하의 사용자. 이것을 시도하십시오 :

<h:outputLabel value="#{bundle.CreateUsersLabel_groups}" for="groupsCollection" /> 
    <h:selectManyMenu id="groupsCollection" 
     value="#{usersController.selected.groupsCollection}" 
     title="#{bundle.CreateUsersTitle_groups}" converter="omnifaces.SelectItemsConverter"> 
    <f:selectItems value="#{groupsController.itemsAvailableSelectOne}" /> 
</h:selectManyMenu> 
+0

빙고! 그것은 작동합니다. 지금까지 JSF에 대한 많은 문제점을 지적한 것처럼 해결책은 간단합니다! 그러나 사용자가 단일 그룹을 선택할 수있게하는 방법이 있습니까? 이런 일이 발생하면이 구현은 현재 정상적으로 작동하지만 앞으로의 개발을 위해이 유연성을 원합니다. 다시 고마워 :-) 내 머리카락은 지금 다시 성장할 기회를 가질 것입니다 ... – rustproofFish

+0

사용자가 단일 그룹을 선택할 수있게하려면 h : selectOneMenu를 사용해야합니다. 그러나, 당신이하고있는 것과는 달리, selectOneMenu의 "value"속성은 Collection이 아닌 Entity를 가리켜 야합니다. andremonteiro

+0

우수. 설명 주셔서 감사합니다 - 나는 그것을 줄 것이다 – rustproofFish