0

わかりました。これは私の初めての wicket アプリケーションで、pushpanel の例を使用して icepush を統合しようとしています。

私がやろうとしているのは、別のクラスから「updatePanel(String content)」メソッドを呼び出して、更新をパネルにプッシュすることです。

これがコードです。

私の拡張された PushPanel には、次のものがあります。

public AsyncCommsPanel(String id) {
    super(id);
    this.setOutputMarkupId(true);

    ajaxForm = new Form("ajaxForm");
    ajaxForm.setOutputMarkupId(true);

    ajaxForm.add(textStore = new Label("textStore",""));

    ajaxForm.add(new AjaxButton("updateButton") {
        @Override
        protected void onSubmit(AjaxRequestTarget target, Form form) {
            System.out.println("Update button pressed!");
            /* CODE TO PULL NEW DATA FROM ELSEWHERE */
            /* UPDATE TAKES TIME SO HAS ITS OWN CALLBACK */
        }

        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form) {
            System.out.println("Update button error.");
        }
    });
    add(ajaxForm);
}

@Override
protected void pushCallback(AjaxRequestTarget target) {
    target.add(ajaxForm);
}

public void updatePanel(String updateString) {
    /* THIS METHOD SHOULD ALLOW THE PANEL TO BE UPDATED FROM ELSEWHERE */
    if (textStore != null) ajaxForm.remove(textStore);
    ajaxForm.add(textStore = new Label("textStore", updateString));
    push();
}

データ ギャザラーのコールバック メソッドから「updatePanel」メソッドを呼び出そうとすると、次の例外が発生します。

ERROR (SelectorManager.run):  org.apache.wicket.WicketRuntimeException: No RequestCycle is currently set!
at org.apache.wicket.Component.getRequest(Component.java:1831)
at org.apache.wicket.markup.html.WebPage.dirty(WebPage.java:315)
at org.apache.wicket.Page.dirty(Page.java:288)
at org.apache.wicket.Page.componentRemoved(Page.java:948)
at org.apache.wicket.MarkupContainer.removedComponent(MarkupContainer.java:1422)
at org.apache.wicket.MarkupContainer.remove(MarkupContainer.java:612)
at uk.ac.warwick.collabtex.AsyncCommsPanel.updatePanel(AsyncCommsPanel.java:107)
at uk.ac.warwick.collabtex.Editor$1.updateSuccess(Editor.java:98)
4

1 に答える 1