2012-07-16 169 views
0

我是hibernate/jsf的noobie,所以我想知道標準的處理方式是處理以下(相當標準的)場景。多對多下拉列表

我有2類:

public Class Appointment 
    Client client; 
    Date date; 

public Class Client 
    String name; 
    String address; 

有任命和客戶端之間的多對一的關係(客戶端可以有很多約會)。但是,創建約會時,我希望用戶能夠從下拉列表中選擇客戶端。在我看來,要做到這一點,我需要在約會和客戶之間建立多對多的關係。這是標準方法嗎?有替代品嗎?

回答

0

常見的極端任務。不,你不想要很多,這意味着同一個約會可以有多個客戶。嘗試是這樣的:

豆:

private Long clientId; 
private Date date; 
private List<Client> clients; 

public List<Client> getClients(){ 
    if(clients == null){ 
     clients = clientDAO.findAll(); // Lazy loading since JSF has a habit of calling the getter multiple times. 
    } 
    return clients; 
} 

// Getters and setters for client and date 

public void saveAppointment(){ 
    applicationDAO.createAppointment(date, clientId); 
} 

XHTML:

<h:selectOneMenu value="#{bean.clientId}"> 
    <f:selectItems value="#{bean.clients}" var="client" itemLabel="#{client.name]" itemValue="#{client.id}"/> 
</h:selectOneMenu> 
+0

謝謝,這看起來像我會嘗試。 – Dave 2012-07-17 14:27:47

0

我想你只能使用多對一的映射,因爲只有客戶端可以有很多約會,如果我得到你想要做的事情,約會是特定於唯一客戶端的。所以你必須使用一對多註釋,也不要忘記指定mappedBy屬性,使您可以相對於從雙方的作用

祝你好運,我的英語水平遺憾:■

+0

但是,創造一個新的約會,我將需要的客戶名單時使用的客戶端的下拉列表中,並且獲得這個(我認爲)的唯一方法是使用多對多關係,即使正常關係是許多約會的客戶。這是我不確定的。無論如何,謝謝你的回答。 – Dave 2012-07-16 20:31:47

+0

我不這麼認爲,通過這種方式,你不會對你的項目有一個好的概念,要將客戶列表傳遞到你的下拉列表中,你必須在你的控制器中實例化一個客戶列表並將它作爲參數傳遞到你的jsp,jsf ...(取決於你使用的技術,通過resquest參數,modelattributes或其他的東西,這取決於你使用的是什麼 – maouven 2012-07-16 20:43:54

+0

我認爲我可以在我的AppointmentBean中創建一個方法,返回一個全部列表。客戶我只是想知道處理這種情況(我想是很常見的)的標準方法是 – Dave 2012-07-16 21:08:57