将一个组件注入我的控制器时,我遇到了一个奇怪的问题:
public class AnalyticsController {
@Wire("#fileSourceTree")
private Tree fileSourceTree;
@Wire("#chart")
private Chart chart;
...
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
TreeModel<TreeNode<Object>> model = session.getFileSourceTreeModel();
if(model == null) {
model = createFileSourceTreeModel();
session.setFileSourceTreeModel(model);
}
fileSourceTree.setModel(model);
log.debug("Chart is initialized? {}", chart != null);
chart.setModel(new ChartModel(new LinkedList<ChartData>(), "", ""));
}
analytics.zul
<?page title="Ana File Analytics" contentType="text/html;charset=UTF-8"?>
<?style src="css/nv.d3.css"?>
<zk>
<borderlayout apply="my.package.AnalyticsController">
...
<center>
<vlayout>
<hlayout valign="middle" style="padding: 10px 20px 5px">
<label value="Type:" />
<combobox id="statisticsTypeCombobox" model="${$composer.statisticsTypeModel}" />
<label value="Interval:" />
<combobox id="intervalCombobox" model="${$composer.intervalModel}" />
<label value="From: " />
<datebox id="fromDatebox" />
<label value="to" />
<datebox id="toDatebox" />
<button id="showButton" label="Show" />
</hlayout>
<div style="padding: 5px 30px">
<label id="chartHeader"
style="font: bold 28px Verdana Arial sans-serif; color: #2a5dda" />
</div>
<chart id="chart" height="500px" />
</vlayout>
</center>
我尝试在最后一行设置模型(NullPointerException
)时得到chart.setModel()
,如果没有注入图表(但正确注入了fileSourceTree
)。问题是,当在我的本地机器上尝试它时,它可以工作但是当我将它部署到我们的开发环境时,我收到了这个NPE(我在其他组件中也有类似的问题)。我不知道这种行为的原因是什么以及如何解决它。
答案 0 :(得分:0)
您的控制器需要从SelectorComposer<T>
等作曲家继承。
来自ZK manual:
为了简化UI控制器部分的实现,ZK提供了几个框架实现。例如,SelectorComposer,作为最流行的骨架之一,根据您指定的Java注释自动连接组件,变量和事件侦听器。
只需在代码中更改该行:
public class AnalyticsController extends SelectorComposer<BorderLayout>