0

我不知道为什么 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">,但也没有用。这是如何引起的,我该如何解决?

4

1 回答 1

2

当您单击 ajax 按钮时,您无法重新渲染页面上不存在的组件。

一个简单的解决方案是将渲染属性从 移动h:panelGroupp: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>
于 2012-10-19T06:08:59.200 回答