我对Wicket很陌生。我在单击按钮时从主面板(ChartPanel)将模型添加到子面板(MainPanel)。

MainPanel.java

单击按钮后,更改模型后将重新添加chartPanel。以下是我在MainPanel的buttonClick中使用的代码。在这里,onRenderAnnotations事件是在用户界面中的某些单击生成的。

 @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());
    }
}


ChartPanel.java

之后,在chartPanel中,我想使用更新的模型在chartpanel中添加组件。最好的方法是什么?

我想在类ChartPanel中做这样的事情:

@Override
protected void onRender()
{
    super.onModelChanged();

    LearningCurve newLearningCurve = getModel().getObject();

    requestTarget = ???

    String js = createJavascript(newLearningCurve);
    requestTarget.prependJavascript(js);
}


我的问题是,在上面的代码中,如何获取请求目标,因为它不是ajax请求,我也无法在参数中获取它。我是否应该使用其他函数来获取requestTarget?但是我希望每次从任何地方更新ChartPanel的模型时都可以调用它。

原谅我的无知。我已经尝试了几天,但仍然无法解决。我尽力解释了一下,但是如果缺少任何信息,请发表评论,我会立即添加。

谢谢。

最佳答案

您应该改写renderHead()

@Override
public void renderHead(IHeaderResponse response)
{
    super.renderHead(response);

    response.render(OnLoadHeaderItem.forScript(
            createJavascript(newLearningCurve)));
}


这样,无论是由于AjaxRequest而添加图表,还是只是在重新呈现页面时,图表都将正确显示。

10-07 18:55