代码之家  ›  专栏  ›  技术社区  ›  helloWorld

如何使用JSF和EJB在Java Web应用程序中实现@NamedQuery

  •  1
  • helloWorld  · 技术社区  · 10 年前

    所以我在这里是个无名小卒,我在NetBeans中创建了Java Web应用程序 数据库中的实体类 (假设数据库中只有一个名为 用户 它产生了

    1. 用户.java
    2. 用户控制器.java
    3. 用户Facade.java
    4. 抽象Facade.java

    然后从实体类创建JSF页面。它产生了

    1. 创建.xhtml
    2. 编辑.xhtml
    3. 列表.xhtml
    4. 视图.xhtml

    在User.java中,我有

    @NamedQuery(name=“Users.findByName”,query=“SELECT u FROM Users” WHERE u.name=:name“),

    我需要学习如何在View.xhtml中实现这个查询,因为我只需要按名称显示用户,而不是全部。有人能给我一个指示吗。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Jaqen H'ghar    10 年前

    正如已经说过的,很难知道你想要什么。“在View.xhtml中实现查询”没有意义,因为NamedQuery将返回一个用户列表,而View.xhtml只能显示1个用户。

    从List.xhtml中使用它会更有意义,但是使用数据表过滤会更容易;类似的东西

    <p:column filterBy="#{item.name}" filterMatchMode="contains">
        <f:facet name="header">
             Name
        </f:facet>
        <h:outputText value="#{item.name}"/>
    </p:column>
    

    如果 您希望/需要使用NamedQuery,您需要在EJB(=UserFacade)上创建一个方法;类似的东西

    public List<User> findByName(String name) {
        return em.createNamedQuery("Users.findByName").setParameter("name", name).getResultList();
    }
    

    我不知道你想如何调用这个方法,因为需求并不明确。