저녁!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>
...
'h : selectOneMenu'를 올바르게 사용하지 않았습니다. 이 컴포넌트는 당신이 가장하는 컬렉션이 아닌 단일 선택을 반환합니다 ('# {usersController.selected.groupsCollection}'). –
공정한 포인트. 나는 분명히 잘못된 것을하고 있는데, 대신 무엇을 사용해야합니까? 하나 이상의 (또는 그 이상의) 그룹 엔터티가있는 사용자 필드의 Collection 속성을 채워야합니다. SelectOneMenu (또는 대안)는 콜렉션이 아닌 이러한 엔티티로 채워 져야합니다. – rustproofFish