Java Wicket-从另一个面板设置模型
我对维克特很陌生。我通过单击按钮从主面板(Java Wicket-从另一个面板设置模型,java,wicket,wicket-6,wicket-1.5,Java,Wicket,Wicket 6,Wicket 1.5,我对维克特很陌生。我通过单击按钮从主面板(MainPanel)向子面板(ChartPanel)添加模型 MainPanel.java 单击按钮,我将在更改图表面板的模型后重新添加它。以下是我在主面板的按钮点击中使用的代码。这里,OnRenderAnotations事件是在UI中单击时生成的 @OnEvent public void onRenderAnnotations(RenderAnnotationsEvent aEvent) { LOG.trace("clicked on the
MainPanel
)向子面板(ChartPanel
)添加模型
MainPanel.java
单击按钮,我将在更改图表面板的模型后重新添加它。以下是我在主面板的按钮点击中使用的代码。这里,OnRenderAnotations事件是在UI中单击时生成的
@OnEvent
public void onRenderAnnotations(RenderAnnotationsEvent aEvent)
{
LOG.trace("clicked on the annotation");
renderChart( aEvent.getRequestHandler());
}
private void renderChart(IPartialPageRequestHandler aRequestHandler)
{
MultiValuedMap<String, Double> recommenderScoreMap = getLatestScores(aRequestHandler);
Map<String,String> curveData = new HashMap<String,String>();
LearningCurve learningCurve = new LearningCurve();
for (String recommenderName : recommenderScoreMap.keySet()) {
String data = recommenderScoreMap.get(recommenderName).stream().map(Object::toString)
.collect(Collectors.joining(", "));
curveData.put(recommenderName,data);
learningCurve.setCurveData(curveData);
learningCurve.setMaximumPointsToPlot(MAX_POINTS_TO_PLOT);
}
chartPanel.setDefaultModel(Model.of(learningCurve));
// to avoid the error, A partial update of the page is being rendered
try {
aRequestHandler.add(chartPanel);
}
catch (IllegalStateException e) {
LOG.warn("Not updating the chart. " + e.toString());
setResponsePage(getPage());
}
}
我的问题是,在上面的代码中,如何获取请求目标,因为它不是ajax请求,在参数中也没有。我是否应该使用其他的函数,在这里我也会得到一个requestTarget。但是我希望每次从任何地方更新ChartPanel
的模型时都调用它
请原谅我的无知。我已经试了几天了,但我还是被卡住了。我试图解释它足够,但如果任何信息丢失,请评论,我会立即添加它
谢谢。您应该替代renderHead()
:
@Override
public void renderHead(IHeaderResponse response)
{
super.renderHead(response);
response.render(OnLoadHeaderItem.forScript(
createJavascript(newLearningCurve)));
}
这样,无论是由于AjaxRequest添加的图表,还是仅仅在重新提交页面时添加的图表,都将正确显示图表。它可以正常工作,但现在出现了问题。当我再次单击按钮时,表示iPartialPageRequestHandler.add(图表面板)再次调用代码>。然后它抛出'java.lang.IllegalStateException:正在呈现页面的部分更新,无法再添加组件[ChartPanel[component id=chart container]`它不允许我在同一页面上再次添加ChartPanel。在提神的时候效果很好。如何处理这种情况?在渲染之前单击按钮,因此应该可以添加组件。可以展开显示单击处理的第一个代码段吗?我展开了代码。annotationRender事件是由UI中的某些单击以及刷新选项卡引起的。因此,我仔细观察,刷新选项卡时会引发部分渲染异常。为此,我用try-catch包围了有问题的行。不确定这是否是避免此问题的正确方法。你能给我一个暗示吗?我还有一个非常重要的问题,引起了我的困惑。每次将组件添加到ajax目标时,是否都会调用组件的renderHead
?我想确保java脚本的呈现在两种情况下进行。1) 在页面重新加载时,2)当组件添加到AJAX目标时。是的,在每次呈现时调用renderHead()
,这包括通过AJAX更新组件时。
@Override
public void renderHead(IHeaderResponse response)
{
super.renderHead(response);
response.render(OnLoadHeaderItem.forScript(
createJavascript(newLearningCurve)));
}