0

メールボックスオブジェクトに関するさまざまな情報を表示する必要があるデータテーブルのあるページがあります。これらの情報の1つは、メールボックスオブジェクトのIDによって保存されるメールボックスの所有者です。出力では、メールボックスオブジェクトによってユーザー名を取得するバッキングBeanのメソッドでこれを解決しました。入力では、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();
}
}

皆さん、ありがとうございました!

4

1 に答える 1

2

あなたのモデルは間違っています。

Mailbox、を置き換えます

@Column
private Long usrId;

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

#{m.user}このようにして、の代わりに使用できます#{bean.userByMailbox(m)}。このようにして、プロパティも書き込み可能になります(おそらく、実際にPropertyNotWritableExceptionこのEL式を使用しようとすると時間がかかります<p:autoComplete value>。将来の質問では、過度に一般的な質問をする代わりに、そのように指示します)。

この具体的な問題は、本質的にJSFやとは関係がないことに注意してください<p:autoComplete>

于 2013-02-15T15:20:28.837 に答える