2013-02-15 53 views
0

我有一個數據表的頁面,必須顯示有關郵箱對象的各種信息。其中一個信息是郵箱的所有者,郵箱的ID由郵箱對象存儲。在輸出中,我用一個支持bean的方法解決了這個問題,該方法通過郵箱對象檢索用戶名。在輸入中,我認爲使用自動完成與pojo,但我不能確切地知道如何做到這一點。PrimeFaces數據表編輯自動完成pojo

我的JSF頁面:

<p:dataTable id="dataTable" value="#{bean.mailboxes}" var="m" editable="true"> 
    <!-- other table --> 
    <p:column headerText="Owner"> 
    <p:cellEditor> 
     <f:facet name="output"> 
     <h:outputText value="#{bean.userByMailbox(m)}" /> 
     </f:facet> 
     <f:facet name="input"> 
     <!-- here comes autocomplete --> 
     </f:facet> 
    </p:cellEditor> 
    </p:column> 
</p:dataTable> 

我的豆:

public class Bean { 

// Other properties and methods 

List<Mailbox> mailboxes; 

public List<Mailbox> getMailboxes() { 
    if (mailboxes == null) { 
     Query q = em.createNamedQuery("Mailbox.findAll"); 
     mailboxes = q.getResultList(); 
    } 

    return mailboxes; 
} 

public User getUserByMailbox(Mailbox m) { 
    Query q = em.createNamedQuery("User.findByUsrId"); 
    q.setParameter("usrId", m.getUsrId()); 
    return (User)q.getSingleResult(); 
} 
} 

謝謝大家!

+0

你不是全新的,所以你應該知道你應該顯示代碼 – kolossus 2013-02-15 12:43:17

+0

我認爲這個例子來自[Primefaces autocompletes](http://www.primefaces.org/showcase/ui/autoCompletePojo.jsf ; jsessionid = h6hn1ic6vp4i1a3z0s1vp2fpr)很明顯 – Darka 2013-02-15 13:06:58

回答

2

您的模型是錯誤的。

Mailbox,更換

@Column 
private Long usrId; 

通過

@ManyToOne 
@JoinColumn(name="usrId") 
private User user; 

這種方式,您可以只使用#{m.user}代替#{bean.userByMailbox(m)}。這種方式屬性也是可寫的(也許你實際上得到PropertyNotWritableException,而試圖在<p:autoComplete value>中使用這個EL表達式;在未來的問題中告訴你,而不是問一個過於籠統的問題)。

請注意,這個具體的問題基本上與JSF沒有關係,也不是<p:autoComplete>

+0

對不起,但我對Java很新,所以我甚至不知道這些JPA註釋,我認爲沒有辦法做到這一點。無論如何謝謝BalusC。 – 2013-02-15 16:01:17