繁体   English   中英

从Bean更新Java创建的Primefaces图表

[英]Update java created Primefaces Chart from Bean

我在bean中创建了一个饼图,并将其添加到面板中。 现在,我将从Bean更新此图表,但该图表未更新。 我已经更新了模型,这是正确的,但是为什么图表不正确?

这是一张图片,页面的外观如何: 在此处输入图片说明

当我按下按钮时,我将更新我的图表。

这是我创建图表的代码:

Panel p = (Panel) e.getComponent().getParent().getParent();
p.setStyle("width: 500px; height: 400px !important;");

p.getChildren().clear();

Application ap = facesContext.getApplication();
Chart chart = (Chart) ap.createComponent(facesContext, "org.primefaces.component.Chart",
        "org.primefaces.component.ChartRenderer");
chart.setId("chart" + chart.hashCode());

setTitle(p.getId(), msgs.get("dashboard_chart5_title"));

if (getMemberTrendStatsIsNotEmpty()) {
   HtmlForm form = (HtmlForm) ap.createComponent(HtmlForm.COMPONENT_TYPE);
   form.setId("memberTrendForm");

   chart.setType("bar");
   chart.setId("memberTrend");
   chart.setModel(memberTrendStats);
   ValueExpression ve = ap.getExpressionFactory().createValueExpression(facesContext.getELContext(),
                 "#{dashboardController.memberTrendStats}", PieChartModel.class);
   chart.setValueExpression("model", ve);
   form.getChildren().add(chart);

   OutputLabel out = (OutputLabel) ap.createComponent(OutputLabel.COMPONENT_TYPE);
   out.setFor("yearsBack");
   out.setValue(msgs.get("dashboard_chart1_search") + ": ");
   form.getChildren().add(out);

   InputText in = (InputText) ap.createComponent(InputText.COMPONENT_TYPE);
   in.setId("yearsBack");
   in.setValue(yearsBack);
   in.setStyle("margin-right:10px;");
   in.setType("number");

   NumberConverter nc = new NumberConverter();
   nc.setMaxFractionDigits(0);
   in.setConverter(nc);
   form.getChildren().add(in);

   CommandButton btn = (CommandButton) ap.createComponent(CommandButton.COMPONENT_TYPE);
   btn.setValue(msgs.get("dashboard_chart1_update"));

   AjaxBehavior ab = new AjaxBehavior();
   ExpressionFactory ef = facesContext.getApplication().getExpressionFactory();
   MethodExpression me = ef.createMethodExpression(facesContext.getELContext(),
       "#{dashboardController.updateMemberTrend}",
       null,
       new Class[] { ActionEvent.class });
   ab.setListener(me);
   btn.addClientBehavior("submit", ab);
   btn.setProcess("@form");
   btn.setAjax(true);

   btn.addActionListener(new MethodExpressionActionListener(me));

   form.getChildren().add(btn);

   p.getChildren().add(form);
} else {
   p.getChildren().add(getEmptyMessage());
}

这是我的代码以刷新图表:

msgs = langFacade.getLangProperty(facesContext.getViewRoot().getLocale().getLanguage());

InputText in = (InputText) findUIComponent("memberTrendForm:yearsBack");

if (in != null) {
    yearsBack = ((Long) in.getValue()).intValue();
}

createChartModels();

RequestContext.getCurrentInstance().update("memberTrendForm:memberTrend");

有人可以帮我解决这个问题吗? 谢谢

Okey,我找到了解决方案,在表达式中使用了false模型:

ValueExpression ve = ap.getExpressionFactory().createValueExpression(facesContext.getELContext(),
                 "#{dashboardController.memberTrendStats}", BarChartModel.class);
chart.setValueExpression("model", ve);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM