【问题标题】:How to implement @NamedQuery in Java Web application using JSF and EJB如何使用 JSF 和 EJB 在 Java Web 应用程序中实现 @NamedQuery
【发布时间】:2015-04-02 01:05:48
【问题描述】:

所以我在这里是菜鸟,我在 NetBeans 中创建了 Java Web 应用程序,创建了 来自数据库的实体类(假设我在数据库中只有一个名为 USER 的表> 它产生了

  1. 用户.java
  2. UserController.java
  3. UserFacade.java
  4. AbstractFacade.java

并且已经从实体类创建了 JSF 页面。它产生了

  1. 创建.xhtml
  2. Edit.xhtml
  3. List.xhtml
  4. View.xhtml

在 User.java 我有

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

我需要了解如何在我的 View.xhtml 中执行此查询,因为我只需要按名称显示用户而不是全部。谁能给我一个指导。

【问题讨论】:

  • 你忘了告诉你到底卡在了哪一步。它是在创建 JSF 托管 bean 吗?还是使用输入字段创建 JSF 表单?还是提交JSF表单?还是调用 bean 动作方法?还是注入EJB?还是以输入为参数调用 EJB 方法?还是以输入为参数执行命名查询?还是将 EJB 的结果分配为 ​​JSF bean 属性?还是在 JSF 表中显示结果?等等..等等. 顺便说一句,只要您无法编写代码,您最好不要乱用代码生成器。否则你什么都学不到。

标签: java jsf-2 ejb-3.0


【解决方案1】:

如前所述,很难知道自己想要什么。 “在 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();
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多