未显示数据库中的 JSF bean

2024-01-21

我有以下豆:

import java.util.List;
import javax.faces.bean.RequestScoped;
import javax.annotations.ManagedBean;
import javax.persistence.EntityManager;
import listener.EMF;
import model.CustomerOrder;

@MangedBean
@RequestScoped
public class OrderBean {

    private List<CustomerOrder> orderList;

    /**
     * Creates a new instance of OrderBean
     */
    public OrderBean() {
        EntityManager em = EMF.createEntityManager();
        this.orderList = em.createNamedQuery("CustomerOrder.findAll").getResultList();
        System.out.println("=== Orderlist ===");
        for (CustomerOrder order : orderList) {
            System.out.println(order.getNumber());
        }
        em.close();
    }

    public List<CustomerOrder> getOrderList() {
        System.out.println("=== In getOrderList ===");
        return orderList;
    }

    public void setOrderList(List<CustomerOrder> orderList) {
        this.orderList = orderList;
    }

}

CustomerOrder 类是一个 JPA 类:

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.*;
import java.util.regex.*;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import listener.EMF;
import regex.AttachmentAnalyzer;

@Entity
@Table(name = "customerorder")
@NamedQueries({
    @NamedQuery(name = "CustomerOrder.findAll", query = "SELECT c FROM CustomerOrder c"),
    @NamedQuery(name = "CustomerOrder.findById", query = "SELECT c FROM CustomerOrder c WHERE c.id = :id"),
    @NamedQuery(name = "CustomerOrder.findByNumber", query = "SELECT c FROM CustomerOrder c WHERE c.number = :number"),
    @NamedQuery(name = "CustomerOrder.findByCalculationparameter", query = "SELECT c FROM CustomerOrder c WHERE c.calculationparameter = :calculationparameter"),
    @NamedQuery(name = "CustomerOrder.findByActive", query = "SELECT c FROM CustomerOrder c WHERE c.active = :active"),
    @NamedQuery(name = "CustomerOrder.findByLastupdate", query = "SELECT c FROM CustomerOrder c WHERE c.lastupdate = :lastupdate")})
public class CustomerOrder implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Size(max = 255)
    @Column(name = "number")
    private String number;
    @Column(name = "calculationparameter")
    private BigDecimal calculationparameter;
    @Column(name = "active")
    private Short active;
    @Basic(optional = false)
    @NotNull
    @Column(name = "lastupdate")
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastupdate;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "customerorderId")
    private List<Orderline> orderlineList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "customerorderId")
    private List<Attachment> attachmentList;
    @JoinColumn(name = "lastupdateby", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private User lastupdateby;
    @JoinColumn(name = "customer_id", referencedColumnName = "id")
    @ManyToOne
    private Customer customerId;
    @Transient
    private boolean validOrder;

    public CustomerOrder() {
    }

    public CustomerOrder(Email email) {
        this.attachmentList = email.getAttachments();
        EntityManager em = EMF.createEntityManager();
        List<Customer> customers = em.createNamedQuery("Customer.findAll").getResultList();
        User systemUser = (User) em.createNamedQuery("User.findByName").setParameter("name", "system").getSingleResult();
        em.close();
        for (Customer customer : customers) {
            String fromAddressFilter = customer.getEmailaddressfilter();
            String subjectFilter = customer.getEmailsubjectfilter();
            String subject = email.getSubject();
            String content = email.getContent();
            if (isMatch(email.getSubject(), subjectFilter)
                    && isMatch(email.getFromAddress(), fromAddressFilter)) {
                this.validOrder = true;
                this.active = 1;
                AttachmentAnalyzer analyzer = new AttachmentAnalyzer(customer, subject, content, attachmentList);
                this.number = analyzer.getNumber();
                this.calculationparameter = analyzer.getCalculationParameter();
                this.orderlineList = analyzer.getOrderlineList();
                this.customerId = customer;
                this.lastupdateby = systemUser;
                for (Attachment a : attachmentList) {
                    a.setCustomerorderId(this);
                }
                for (Orderline o : orderlineList) {
                    o.setCustomerorderId(this);
                    o.setLastupdateby(systemUser);
                }
            } else {
                this.validOrder = false;
            }
        }
    }

    private boolean isMatch(String string, String filter) {
        Pattern pattern;
        pattern = Pattern.compile(filter);
        Matcher matcher = pattern.matcher(string);
        boolean isMatch = matcher.find();
        return isMatch;
    }


// getters, setters and overrided hashCode, equal and toString methods omitted 

}

当收到新的电子邮件消息时,Quartz 会调用 JPA 类构造函数 CustomerOrder(Email email)。我测试了这个并且有效。我的数据库中有一些客户订单记录。

最后是我的 JSF 页面:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Test page</title>
    </h:head>
    <h:body>
        <h:dataTable var="order" value="#{orderBean.orderList}" >
            <h:column>
                #{order.customerId}
            </h:column>
        </h:dataTable>
    </h:body>
</html>

我希望它能从数据库中的 customerorders 表中输出 customerId 字段。但是,它只返回一个空表。

我至少期望在我的服务器终端中显示来自 bean 的 Sysout 消息,但即使这些也没有显示。

问题:我的代码有什么问题,为什么我的数据库条目没有显示?我该如何调试这个问题?


使用 java 8、eclipse luna、tomcat 8 和 mojarra 2.2.7; 导入后@ManagedBean from javax.faces.bean.ManagedBean代替javax.annotations.ManagedBean,它工作得很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未显示数据库中的 JSF bean 的相关文章

  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • JPA EntityManager 缓存

    我有一个实体定义如下 public class Version Id private Long id private String content Transient private Model model 据我所知 当find操作是在实体
  • 使用@Singleton和@Stateless加载和缓存应用程序范围的数据

    我正在寻找一种优雅的解决方案来解决加载和缓存的老问题static shared应用程序启动时的数据 具有无限的生命周期 我以前的方法是 Spring Singleton Bean 但我现在正在尝试用 Spring Singleton Bea
  • 如何将容器管理事务 (CMT) 与 JBoss AS 6、Hibernate 3.6、JPA、JTA 和 EJB3 结合使用

    我正在尝试使用 CMT 设置网络应用程序 我已经让它在 Eclipse 中独立运行了 现在我尝试使用 Struts 1 0 让它在 Jboss AS 6 中工作 我选择 CMT 是因为我读过的 doco 暗示它是最好的并且 使用起来最简单
  • JSF 2.1 中的 HTML 4 <按钮>

    我想使用以下命令 The JSF
  • OpenFaces JSF 2 组件库

    有没有人尝试过开放面孔 3 http openfaces org并可以对以下内容进行简短评论 稳定 与其他库的兼容性 PrimeFaces RichFaces 等 使用方便 换肤功能 主题支持等 我正在寻找 JSF 2 组件库 我目前正在使
  • 限制 JPQL 中的结果数量

    如何限制从数据库检索结果的数量 select e from Entity e I need only 10 results for instance 您可以尝试像这样给出 10 个要显式获取的结果 entityManager createQ
  • 外部实体更改后索引不更新

    我目前正在开发一个项目 使用 JPA 2 1 保存数据并使用 hibernate search 4 5 0 final 搜索实体 映射类和索引后 搜索工作正常 但是 当我更改值时描述B 类从 someStr 到 anotherStr 数据库
  • JSF Maven Mojarra 实施

    我尝试使用 JSF Eclipse 和 Maven 创建简单的项目 我用了
  • 将 hyperjaxb3 升级到 jpa 2.1

    我正在尝试在使用 maven jpa hibernate 和 hyperjaxb 的 eclipse 项目中升级到 JPA 2 1 当我尝试执行以下操作时出现以下错误Run As Run on Server从日食内部 java lang N
  • 流程验证时 selectManyCheckbox LazyInitializationException

    看来 如果您使用由 hibernate 代理的集合支持的 selectManyCheckbox 您将遇到可怕的 LazyInitializationException 问题 这与支持 bean 的状态无关 调试 Mojarra 2 1 后
  • 如何使用 Hibernate 3 带注释的类配置 Spring Security 2 数据库身份验证?

    我正在使用 Hibernate 3 带有 JPA 注释 Spring 2 5 和 Spring Security 2 0 5 构建一个应用程序 我想知道我需要在我的
  • 如何在 JPA 中使用枚举

    我有一个电影租赁系统的现有数据库 每部电影都有一个评级属性 在 SQL 中 他们使用约束来限制该属性的允许值 CONSTRAINT film rating check CHECK rating text text OR rating tex
  • 在 JPA 中保留 Java 8 LocalTime

    我的一个实体中有一个 Java 8 LocalTime private final LocalTime departureTime 它是一个带有 Spring Data Rest 的 Spring Boot 1 3 6 应用程序 我使用 J
  • 无法让 PrimeFaces RequestContext.getCurrentInstance().openDialog() 工作

    无法获取 PrimeFacesRequestContext getCurrentInstance openDialog 上班 我直接从 primefaces 展示中提取了示例代码 但我从未打开过对话框 我正在使用在 Wildfly 8 2
  • 不想保留一对一的实体

    假设我有两节课Employee and Department In Employee我已经写了 OneToOne fetch FetchType EAGER cascade CascadeType ALL JoinColumn name d
  • 如何在 JSF 中禁用页面/表单

    对于我的应用程序 我希望拥有具有不同权限的用户 一种权限允许用户查看我的数据库中的数据 而另一种权限允许他们编辑数据 登录时 我会检查他们的权限以确定他们是否可以编辑数据 如果用户具有只读权限 我正在寻找某种方法来禁用整个页面 有没有一种简
  • JPA - OneToOne 外键作为主键

    我有一个表 需要其主键作为其他表的外键 因此是单向的一对一关系 每本书只有一个作者 如下所示 Entity public class Author Id String code getters and setters Entity publ
  • JPA - 从一列中获取不同的价值

    我有一个只有几个字段的实体 其中之一是城市名称 现在我想从该表中获取所有不同城市的列表 我怎样才能存档它 我尝试使用 DISTINCT 关键字 但它不起作用 我使用 Hibernate 作为 JPA 提供程序 但我想在纯 JPA 查询中获取
  • 为什么 hibernate 在一张表中保存两个 @OneToMany 列表?

    想象一下使用 Hibernate 和 JPA 的简化代码如下 Entity class C Id GeneratedValue public long id MappedSuperclass abstract class A Id Gene

随机推荐