Jsf 从数据库中提取图表
我已经有了一个crudwebapp(JSF+EJB+JPA),我正在尝试开发一个chartBean类,以便在视图层中使用它。 要呈现的数据(通过Primefaces-4条形图)应从数据库中读取 在图表中,我有两个图表系列要显示:Jsf 从数据库中提取图表,jsf,jpa,primefaces,charts,ejb,Jsf,Jpa,Primefaces,Charts,Ejb,我已经有了一个crudwebapp(JSF+EJB+JPA),我正在尝试开发一个chartBean类,以便在视图层中使用它。 要呈现的数据(通过Primefaces-4条形图)应从数据库中读取 在图表中,我有两个图表系列要显示: chartSeries1:employeeGoal->下面Orc实体类中映射的'valor'浮动列 chartSeries2:EmployeeCompleted->下面的hr_Capacity 30h实体类中映射的'RealizationDO'整数列 X轴应显示小时
- chartSeries1:employeeGoal->下面Orc实体类中映射的'valor'浮动列李>
- chartSeries2:EmployeeCompleted->下面的hr_Capacity 30h实体类中映射的'RealizationDO'整数列
//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
}
}
实体Orc类(与chartSeries1相关/参见上述说明):
//导入ommited
@实体
@表(name=“orc”,catalog=“帝亚吉欧”,schema=“atb”)
@XmlRootElement
@命名查询({
@NamedQuery(name=“Orc.findAll”,query=“从Orc o中选择o”),
@NamedQuery(name=“Orc.findById”,query=“从Orc o中选择o,其中o.id=:id”),
@NamedQuery(name=“Orc.findByNomeItem”,query=“从Orc o中选择o,其中o.nomeItem=:nomeItem”),
@NamedQuery(name=“Orc.findByDescItem”,query=“从Orc o中选择o,其中o.descItem=:descItem”),
@NamedQuery(name=“Orc.findByValor”,query=“从Orc o中选择o,其中o.valor=:valor”),
@NamedQuery(name=“Orc.findByDtRef”,query=“从Orc o中选择o,其中o.dtRef=:dtRef”)}
公共类Orc实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@基本(可选=假)
@NotNull
@列(name=“id”)
私有整数id;
@尺寸(最大值=100)
@列(name=“NomeItem”)
私人物品;
@尺寸(最大值=255)
@列(name=“DescItem”)
私有字符串描述项;
//@Max(value=?)@Min(value=?)//对已知的十进制范围值强制执行字段验证
@列(name=“valor”)
私人双重英勇;
@列(name=“DtRef”)
@时态(TemporalType.TIMESTAMP)
私人日期dtRef;
@OneToMany(mappedBy=“idOrc”)
私人收藏HR30H收藏;
//getter/setter/equals/hashCode ommited
}
EJB(抽象外观):
//导入ommited
公共抽象类AbstractFacade{
私有类实体类;
公共抽象外观(类entityClass){
this.entityClass=entityClass;
}
受保护的抽象EntityManager getEntityManager();
公共无效创建(T实体){
getEntityManager().persist(实体);
}
公共无效编辑(T实体){
getEntityManager().merge(实体);
}
公共无效删除(T实体){
getEntityManager().remove(getEntityManager().merge(entity));
}
公共找不到(对象id){
返回getEntityManager().find(entityClass,id);
}
公共列表findAll(){
javax.persistence.CriteriaQuery cq=getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
返回getEntityManager().createQuery(cq.getResultList();
}
公共列表findRange(int[]范围){
javax.persistence.CriteriaQuery cq=getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q=getEntityManager().createQuery(cq);
q、 setMaxResults(范围[1]-范围[0]+1);
q、 setFirstResult(范围[0]);
返回q.getResultList();
}
公共整数计数(){
javax.persistence.CriteriaQuery cq=getEntityManager().getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root rt=cq.from(entityClass);
选择(getEntityManager().getCriteriaBuilder().count(rt));
javax.persistence.Query q=getEntityManager().createQuery(cq);
返回((长)q.getSingleResult()).intValue();
}
}
hr_电容30H EJB外观:
//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);
}
}
//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);
}
}
//导入ommited
@无国籍
公共类HRHfacade扩展了AbstractFacade{
@PersistenceContext(unitName=“atb-hrcapacity30pu”)
私人实体管理者;
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
公共HRHFACADE(){
超级(HR30小时级);
}
}
Orc EJB外观:
//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);
}
}
//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);
}
}
//导入ommited
@无国籍
公共类Facade扩展了AbstractFacade{
@PersistenceContext(unitName=“atb-hrcapacity30pu”)
私人实体管理者;
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
公共建筑立面(){
超级(兽人级);
}
}
提前感谢。您需要创建一个ChartSeries(对于类别图表)或LineChartSeries(对于线性图表)对象,用您的值填充它,最后将该对象添加到笛卡尔模型中。就这些 编辑: 创建并初始化两个ChartSeries对象。然后在遍历列表时填充它们。像这样的方法应该会奏效:
ChartSeries a = new ChartSeries();
ChartSeries b = new ChartSeries();
HrCapacit30h tmp = null;
for(int i =0; i<hrCapacit30h.size();i++){
tmp=hrCapacit30h.get(i);
a.set(tmp.getRealizado(), tmp.getNome());
b.set(tmp.getOcr().getValor(), tmp.getNome());
}
cartesianChartModel.addSeries(a);
cartesianChartModel.addSeries(b);
ChartSeries a=新的ChartSeries();
ChartSeries b=新的ChartSeries();
HR30小时tmp=零;
对于(int i=0;i经过长时间研究后:
/**
*
* @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;
}
}
/**
*
*@作者jMarcel
*/
@ManagedBean
@请求范围
公共类ChartBean{
公共ChartBean(){
}
私有最终映射HorasRealizadasPorFunci=新HashMap();
私有最终映射HorasOrcadasPorFunci=新HashMap();
私人卡特尔夏令营模式卡特尔夏令营模式;
@EJB
私人住宅;
@施工后
私有void初始化(){
cartesianChartModel=新的cartesianChartModel();
createCartesianChartModel();
}
私有void createCartesianChartModel(){
List orcado=of.findAll();
List或cadolist=new ArrayList();
List RealizationList=new ArrayList();
//rlz-Ser
ChartSeries a = new ChartSeries();
ChartSeries b = new ChartSeries();
HrCapacit30h tmp = null;
for(int i =0; i<hrCapacit30h.size();i++){
tmp=hrCapacit30h.get(i);
a.set(tmp.getRealizado(), tmp.getNome());
b.set(tmp.getOcr().getValor(), tmp.getNome());
}
cartesianChartModel.addSeries(a);
cartesianChartModel.addSeries(b);
/**
*
* @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;
}
}