数据库中的PrimeFaces图表 [英] PrimeFaces Chart From Database

查看:156
本文介绍了数据库中的PrimeFaces图表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经有一个CRUD web应用程序(JSF + EJB + JPA),我试图开发一个chartBean类,所以我可以在View层使用它。
要通过数据库读取要呈现的数据(通过Primefaces-4 BarChart)。



在图表中,我有2个chartSeries要显示:




  • chartSeries1:employeeGoal - >在下面的Orc实体类中映射的valorfloat列;

  • chartSeries2:employeeAcpleteished - >下面的hr_capacit30h实体类中映射的Realizado整数列。



X轴应显示小时(基于上面的'chartSeries2'值)。



Y轴应显示employeeName(hr_capacit30h实体类中的nome字符串字段



有没有人知道如何开发下面的createCartesianChartModel()方法以用于jsf页面?



ChartBean类:

  // import ommited 

@ManagedBean
@ RequestScoped
public class hrCapacitChart {

private Map< Integer,Map< String,Number>> HrCapacitFuncis = new HashMap< Integer,Map< String,Number>>();
private double totalHoras;
private CartesianChartModel cartesianChartModel;

@EJB
private HrCapacit30hFacade hcf;

public hrCapacitChart(){
}

@PostConstruct
private void initialize(){
cartesianChartModel = new CartesianChartModel
createCartesianChartModel();
}

public CartesianChartModel getCartesianChartModel(){
return cartesianChartModel;
}

private void createCartesianChartModel(){
List< HrCapacit30h> hrCapacit30h = hcf.findAll();
//这是方法/(托管Bean属性)待开发
}
}

HrCapacit30h实体类(与chartSeries2相关,参见上面的描述):

  @Entity 
@Table(name =hr_capacit30h,catalog =DIAGE,schema =atb)
@XmlRootElement
@NamedQueries({
@NamedQuery hrCapacit30hPK.matricula:query =SELECT h FROM HrCapacit30h h WHERE h.hrCapacit30hPK.matricula =:matricula,查询=SELECT h FROM HrCapacit30h h),
@NamedQuery(name =HrCapacit30h.findByMatricula ),
@NamedQuery(name =HrCapacit30h.findByRealizado),
@NamedQuery(name =HrCapacit30h.findByNome,query =SELECT h FROM HrCapacit30h h WHERE h.nome =:nome query =SELECT h FROM HrCapacit30h h WHERE h.realizado =:realizado),
@NamedQuery(name =HrCapacit30h.findByDtMov,query =SELECT h FROM HrCapacit30h h WHERE h.hrCapacit30hPK.dtMov =:dtMov )})
public class HrCapacit30h implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected HrCapacit30hPK hrCapacit30hPK;
@Size(max = 100)
@Column(name =Nome)
private String nome;
@Column(name =Realizado)
private Integer realizado;
@JoinColumn(name =codUOR,referencedColumnName =cod_UOR)
@ManyToOne(optional = false)
private UpbDeps codUOR;
@JoinColumn(name =status,referencedColumnName =id)
@ManyToOne(optional = false)
private状态;
@JoinColumn(name =idOrc,referencedColumnName =id)
@ManyToOne
private Orc idOrc;
@JoinColumn(name =idDiv,referencedColumnName =id)
@ManyToOne(optional = false)
private DivDeps idDiv;

public HrCapacit30h(){
}

// getters / setters / equals / hashCode ommited
}



Entity Orc类(与chartSeries1相关/见上面的描述)::

  // import ommited 

@Entity
@Table(name =orc,catalog =DIAGE,schema =atb)
@XmlRootElement
@NamedQueries({
@NamedQuery(name =Orc.findAll,query =SELECT o FROM Orc o),
@NamedQuery(name =Orc。 findByNomeItem,query =SELECT o FROM Orc o WHERE o.nomeItem =:;findById,query =SELECT o FROM Orc o WHERE o.id =:id nomeItem),
@NamedQuery(name =Orc.findByDescItem,query =SELECT o FROM Orc o WHERE o.descItem =:descItem),
@NamedQuery(name =Orc.findByValor ,query =SELECT o FROM Orc o WHERE o.valor =:valor),
@NamedQuery(name =Orc.findByDtRef,query =SELECT o FROM Orc o WHERE o.dtRef =:dtRef )})
public class Orc implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name =id)
private Integer id;
@Size(max = 100)
@Column(name =NomeItem)
private String nomeItem;
@Size(最大= 255)
@Column(name =DescItem)
private String descItem;
// @Max(value =?)@Min(value =?)//强制对已知的十进制范围值进行字段验证
@Column(name =valor)
private Double勇气;
@Column(name =DtRef)
@Temporal(TemporalType.TIMESTAMP)
private Date dtRef;
@OneToMany(mappedBy =idOrc)
private Collection< HrCapacit30h> hrCapacit30hCollection;

// getters / setters / equals / hashCode ommited

}


b $ b

EJB(抽象外观):

  // import ommited 

public abstract class AbstractFacade< T> {
private Class< T> entityClass;

public AbstractFacade(Class< T> entityClass){
this.entityClass = entityClass;
}

protected abstract EntityManager getEntityManager();

public void create(T entity){
getEntityManager()。persist(entity);
}

public void edit(T entity){
getEntityManager()。merge(entity);
}

public void remove(T entity){
getEntityManager()。remove(getEntityManager()。merge(entity));
}

public T find(Object id){
return getEntityManager()。find(entityClass,id);
}

public List< T> findAll(){
javax.persistence.criteria.CriteriaQuery cq = getEntityManager()。getCriteriaBuilder()。createQuery();
cq.select(cq.from(entityClass));
return getEntityManager()。createQuery(cq).getResultList();
}

public List< T> findRange(int [] range){
javax.persistence.criteria.CriteriaQuery cq = getEntityManager()。getCriteriaBuilder()。createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q = getEntityManager()。createQuery(cq);
q.setMaxResults(range [1] - range [0] + 1);
q.setFirstResult(range [0]);
return q.getResultList();
}

public int count(){
javax.persistence.criteria.CriteriaQuery cq = getEntityManager()。getCriteriaBuilder()。createQuery();
javax.persistence.criteria.Root< T> rt = cq.from(entityClass);
cq.select(getEntityManager()。getCriteriaBuilder()。count(rt));
javax.persistence.Query q = getEntityManager()。createQuery(cq);
return((Long)q.getSingleResult())。intValue();
}

}

hr_capacit30h EJB facade: p>

  // import ommited 

@Stateless
public class HrCapacit30hFacade extends AbstractFacade< HrCapacit30h> {
@PersistenceContext(unitName =atb-hrCapacit30PU)
private EntityManager em;

@Override
protected EntityManager getEntityManager(){
return em;
}

public HrCapacit30hFacade(){
super(HrCapacit30h.class);
}

}



  // import ommited 

@Stateless
public class OrcFacade extends AbstractFacade< Orc> {
@PersistenceContext(unitName =atb-hrCapacit30PU)
private EntityManager em;

@Override
protected EntityManager getEntityManager(){
return em;
}

public OrcFacade(){
super(Orc.class);
}

}

>

解决方案

经过很长时间的研究:

  / ** 
*
* @author jMarcel
* /
@ManagedBean
@RequestScoped
public class ChartBean {

public ChartBean(){
}

private final Map< Integer,Map< String,Number> HorasRealizadasPorFunci = new HashMap<>();
private final Map< Integer,Map< String,Number>> HorasOrcadasPorFunci = new HashMap<>();
private CartesianChartModel cartesianChartModel;

@EJB
private OrcFacade of;

@PostConstruct
private void initialize(){
cartesianChartModel = new CartesianChartModel();
createCartesianChartModel();
}

private void createCartesianChartModel(){
List< Orc> orcado = of.findAll();
List< Integer> orcadoList = new ArrayList<>();
List< Integer> realizadoList = new ArrayList<>();

// rlz系列
for(Orc o:orcado){
int horasRlz = 0;
for(HrCapacit30h r:o.getHrCapacit30hCollection()){
horasRlz = r.getRealizado();
addOrUpdateRlz(r.getHrCapacit30hPK()。getMatricula(),r.getNome(),horasRlz);
realizadoList.add(r.getHrCapacit30hPK()。getMatricula());
}
}

// orc系列
for(Orc o:orcado){
int horasOrc = 0;
for(HrCapacit30h r:o.getHrCapacit30hCollection()){
horasOrc = r.getIdOrc()。getValor()。intValue();
addOrUpdateOrc(r.getHrCapacit30hPK()。getMatricula(),r.getNome(),horasOrc);
orcadoList.add(r.getHrCapacit30hPK()。getMatricula());
}
}

映射< Object,Number> orcMap = new HashMap<>();
Map< Object,Number> rlzMap = new HashMap<>();

for(Integer i:realizadoList){
populateMap(rlzMap,HorasRealizadasPorFunci.get(i));
}

for(Integer i:orcadoList){
populateMap(orcMap,HorasOrcadasPorFunci.get(i));
}

ChartSeries orcadoSeries = new ChartSeries(Orçado);
orcadoSeries.setData(orcMap);
ChartSeries realizadoSeries = new ChartSeries(Realizado);
realizadoSeries.setData(rlzMap);
cartesianChartModel.addSeries(orcadoSeries);
cartesianChartModel.addSeries(realizadoSeries);

}

private void addOrUpdateRlz(Integer Matricula,String funci,Number horas){
Map< String,Number> map = HorasRealizadasPorFunci.get(matricula);
if(map == null){
map = new HashMap<>();
HorasRealizadasPorFunci.put(matricula,map);
}
Number n = map.get(funci);
if(n == null){
map.put(funci.toUpperCase(),horas);
} else {
map.put(funci.toUpperCase(),horas.intValue());
}
}

private void addOrUpdateOrc(Integer Matricula,String funci,Number horas){
Map< String,Number> map = HorasOrcadasPorFunci.get(matricula);
if(map == null){
map = new HashMap<>();
HorasOrcadasPorFunci.put(matricula,map);
}
Number n = map.get(funci);
if(n == null){
map.put(funci.toUpperCase(),horas);
} else {
map.put(funci.toUpperCase(),horas.intValue());
}
}

private void populateMap(Map< Object,Number> map,Map< String,Number> data){
if(data == null) {
return;
}
for(String key:data.keySet()){
Number n = map.get((Object)key);
if(n == null){
map.put((Object)key,data.get(key));
} else {
map.put((Object)key,n.intValue()+ data.get(key).intValue());
}
}
}

public CartesianChartModel getCartesianChartModel(){
return cartesianChartModel;
}

public void setCartesianChartModel(CartesianChartModel cartesianChartModel){
this.cartesianChartModel = cartesianChartModel;
}
}


I already have a CRUD webApp (JSF+EJB+JPA) and I'm trying to develop a chartBean class so I can use it in the View layer. The data to be rendered (through Primefaces-4 BarChart) should be read from a database.

In the Chart, I have 2 chartSeries to be displayed:

  • chartSeries1: the employeeGoal -> the 'valor' float column mapped in the Orc entity class below;
  • chartSeries2: the employeeAccomplished -> the 'Realizado' integer column mapped in the hr_capacit30h entity class below.

The X-Axis should display the Hours (based on the 'chartSeries2' values above).

The Y-axis should display the employeeName (the 'nome' string field in the hr_capacit30h entity class below).

Does anyone knows how to develop the createCartesianChartModel() method below to be used in a jsf page?

The ChartBean class:

//imports ommited

@ManagedBean
@RequestScoped
public class hrCapacitChart {

    private Map<Integer, Map<String, Number>> HrCapacitFuncis = new HashMap<Integer, Map<String, Number>>();
    private double totalHoras;
    private CartesianChartModel cartesianChartModel;

    @EJB
    private HrCapacit30hFacade hcf;

    public hrCapacitChart() {
    }

    @PostConstruct
    private void initialize() {
        cartesianChartModel = new CartesianChartModel();
        createCartesianChartModel();
    }

    public CartesianChartModel getCartesianChartModel() { 
        return cartesianChartModel;
    }

    private void createCartesianChartModel() { 
        List<HrCapacit30h> hrCapacit30h = hcf.findAll();
    // THIS IS THE METHOD/(Managed Bean property) TO BE DEVELOPED
    }
}

The HrCapacit30h entity class (related to chartSeries2 an Y-axis / see description above):

@Entity
@Table(name = "hr_capacit30h", catalog = "DIAGE", schema = "atb")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "HrCapacit30h.findAll", query = "SELECT h FROM HrCapacit30h h"),
    @NamedQuery(name = "HrCapacit30h.findByMatricula", query = "SELECT h FROM HrCapacit30h h WHERE h.hrCapacit30hPK.matricula = :matricula"),
    @NamedQuery(name = "HrCapacit30h.findByNome", query = "SELECT h FROM HrCapacit30h h WHERE h.nome = :nome"),
    @NamedQuery(name = "HrCapacit30h.findByRealizado", query = "SELECT h FROM HrCapacit30h h WHERE h.realizado = :realizado"),
    @NamedQuery(name = "HrCapacit30h.findByDtMov", query = "SELECT h FROM HrCapacit30h h WHERE h.hrCapacit30hPK.dtMov = :dtMov")})
public class HrCapacit30h implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected HrCapacit30hPK hrCapacit30hPK;
    @Size(max = 100)
    @Column(name = "Nome")
    private String nome;
    @Column(name = "Realizado")
    private Integer realizado;
    @JoinColumn(name = "codUOR", referencedColumnName = "cod_UOR")
    @ManyToOne(optional = false)
    private UpbDeps codUOR;
    @JoinColumn(name = "status", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Status status;
    @JoinColumn(name = "idOrc", referencedColumnName = "id")
    @ManyToOne
    private Orc idOrc;
    @JoinColumn(name = "idDiv", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private DivDeps idDiv;

    public HrCapacit30h() {
    }

//getters/setters/equals/hashCode ommited    
}

The Entity Orc class (related to chartSeries1 / see description above)::

//imports ommited

@Entity
@Table(name = "orc", catalog = "DIAGE", schema = "atb")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Orc.findAll", query = "SELECT o FROM Orc o"),
    @NamedQuery(name = "Orc.findById", query = "SELECT o FROM Orc o WHERE o.id = :id"),
    @NamedQuery(name = "Orc.findByNomeItem", query = "SELECT o FROM Orc o WHERE o.nomeItem = :nomeItem"),
    @NamedQuery(name = "Orc.findByDescItem", query = "SELECT o FROM Orc o WHERE o.descItem = :descItem"),
    @NamedQuery(name = "Orc.findByValor", query = "SELECT o FROM Orc o WHERE o.valor = :valor"),
    @NamedQuery(name = "Orc.findByDtRef", query = "SELECT o FROM Orc o WHERE o.dtRef = :dtRef")})
public class Orc implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "id")
    private Integer id;
    @Size(max = 100)
    @Column(name = "NomeItem")
    private String nomeItem;
    @Size(max = 255)
    @Column(name = "DescItem")
    private String descItem;
    // @Max(value=?)  @Min(value=?)//to enforce field validation to known decimal range values
    @Column(name = "valor")
    private Double valor;
    @Column(name = "DtRef")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dtRef;
    @OneToMany(mappedBy = "idOrc")
    private Collection<HrCapacit30h> hrCapacit30hCollection;

    //getters/setters/equals/hashCode ommited    

}

The EJB (an abstract facade):

//imports ommited

public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

    public List<T> findRange(int[] range) {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0] + 1);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    public int count() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
        cq.select(getEntityManager().getCriteriaBuilder().count(rt));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        return ((Long) q.getSingleResult()).intValue();
    }

}

The hr_capacit30h EJB facade:

//imports ommited

@Stateless
public class HrCapacit30hFacade extends AbstractFacade<HrCapacit30h> {
    @PersistenceContext(unitName = "atb-hrCapacit30PU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public HrCapacit30hFacade() {
        super(HrCapacit30h.class);
    }

}

The Orc EJB facade:

//imports ommited

@Stateless
public class OrcFacade extends AbstractFacade<Orc> {
    @PersistenceContext(unitName = "atb-hrCapacit30PU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public OrcFacade() {
        super(Orc.class);
    }

}

Thanks in advance.

解决方案

After a long way studying it:

/**
 *
 * @author jMarcel
 */
@ManagedBean
@RequestScoped
public class ChartBean {

public ChartBean() {
}

private final Map<Integer, Map<String, Number>> HorasRealizadasPorFunci = new HashMap<>();
private final Map<Integer, Map<String, Number>> HorasOrcadasPorFunci = new HashMap<>();
private CartesianChartModel cartesianChartModel;

@EJB
private OrcFacade of;

@PostConstruct
private void initialize() {
    cartesianChartModel = new CartesianChartModel();
    createCartesianChartModel();
}

private void createCartesianChartModel() {
    List<Orc> orcado = of.findAll();
    List<Integer> orcadoList = new ArrayList<>();
    List<Integer> realizadoList = new ArrayList<>();

    //rlz Series
    for (Orc o : orcado) {
        int horasRlz = 0;
        for (HrCapacit30h r : o.getHrCapacit30hCollection()) {
            horasRlz = r.getRealizado();
            addOrUpdateRlz(r.getHrCapacit30hPK().getMatricula(), r.getNome(), horasRlz);
            realizadoList.add(r.getHrCapacit30hPK().getMatricula());
        }
    }

    //orc Series
    for (Orc o : orcado) {
        int horasOrc = 0;
        for (HrCapacit30h r : o.getHrCapacit30hCollection()) {
            horasOrc = r.getIdOrc().getValor().intValue();
            addOrUpdateOrc(r.getHrCapacit30hPK().getMatricula(), r.getNome(), horasOrc);
            orcadoList.add(r.getHrCapacit30hPK().getMatricula());
        }
    }

    Map<Object, Number> orcMap = new HashMap<>();
    Map<Object, Number> rlzMap = new HashMap<>();

    for (Integer i : realizadoList) {
        populateMap(rlzMap, HorasRealizadasPorFunci.get(i));
    }

    for (Integer i : orcadoList) {
        populateMap(orcMap, HorasOrcadasPorFunci.get(i));
    }

    ChartSeries orcadoSeries = new ChartSeries("Orçado");
    orcadoSeries.setData(orcMap);
    ChartSeries realizadoSeries = new ChartSeries("Realizado");
    realizadoSeries.setData(rlzMap);
    cartesianChartModel.addSeries(orcadoSeries);
    cartesianChartModel.addSeries(realizadoSeries);

}

private void addOrUpdateRlz(Integer matricula, String funci, Number horas) {
    Map<String, Number> map = HorasRealizadasPorFunci.get(matricula);
    if (map == null) {
        map = new HashMap<>();
        HorasRealizadasPorFunci.put(matricula, map);
    }
    Number n = map.get(funci);
    if (n == null) {
        map.put(funci.toUpperCase(), horas);
    } else {
        map.put(funci.toUpperCase(), horas.intValue());
    }
}

private void addOrUpdateOrc(Integer matricula, String funci, Number horas) {
    Map<String, Number> map = HorasOrcadasPorFunci.get(matricula);
    if (map == null) {
        map = new HashMap<>();
        HorasOrcadasPorFunci.put(matricula, map);
    }
    Number n = map.get(funci);
    if (n == null) {
        map.put(funci.toUpperCase(), horas);
    } else {
        map.put(funci.toUpperCase(), horas.intValue());
    }
}

private void populateMap(Map<Object, Number> map, Map<String, Number> data) {
    if (data == null) {
        return;
    }
    for (String key : data.keySet()) {
        Number n = map.get((Object) key);
        if (n == null) {
            map.put((Object) key, data.get(key));
        } else {
            map.put((Object) key, n.intValue() + data.get(key).intValue());
        }
    }
}

public CartesianChartModel getCartesianChartModel() {
    return cartesianChartModel;
}

public void setCartesianChartModel(CartesianChartModel cartesianChartModel) {
    this.cartesianChartModel = cartesianChartModel;
}
}

这篇关于数据库中的PrimeFaces图表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆