0

我有一个带有数据表的页面,该页面必须显示有关邮箱对象的各种信息。这些信息之一是邮箱的所有者,它由其 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 回答