![](/img/trans.png)
[英]Problems with serialization in java, calling a stateless javabean from a primefaces baking bean
[英]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.