我不知道为什么Ajax不能在我的JSF文件中工作。即使我的GlassFish中有最新的Mojarra是3.2.13。这是我的代码
<h:head></h:head>
<h:body>
<h:panelGroup id="panel" rendered="#{chartBean.showCharts}">
<p:barChart id="basic" value="#{chartBean.categoryModel}"
legendPosition="ne" title="Basic Bar Chart" min="0" max="200"
style="height:300px" />
</h:panelGroup>
<h:commandButton value="Display Chart" action="#{chartBean.createCategoryModel}">
<f:ajax render="panel"/>
</h:commandButton>
</h:body>
现在,当我运行此代码时,按钮不起作用。
另一件事是,如果我更改我的代码,例如删除面板,只需在
<f:ajax render="basic"/>
等条形图上呈现并将其放在<form>
中
然后它抛出NullPointerException
。因为它渲染图表并期望chartBean.categoryModel
的值。现在AFAIK不应该因为ajax而呈现。
我无法理解JSF中的ajax行为。我也试过了<f:ajax execute="@form" render="basic">
,但它也没有用。这是怎么造成的,我该如何解决?
答案 0 :(得分:2)
单击ajax按钮时,无法重新渲染页面上不存在的组件。
一个简单的解决方案是将呈现的属性从h:panelGroup
移动到p:barChart
。然后将始终呈现panelGroup,并且JSF会在您的ajax请求期间找到它。
<h:panelGroup id="panel">
<p:barChart rendered="#{chartBean.showCharts}"
id="basic" value="#{chartBean.categoryModel}"
legendPosition="ne" title="Basic Bar Chart" min="0" max="200"
style="height:300px" />
</h:panelGroup>
<h:commandButton value="Display Chart" action="#{chartBean.createCategoryModel}">
<f:ajax render="panel"/>
</h:commandButton>