0

次の状況:

私の Wicket アプリケーションは、javascript と組み合わせて動作します。

たとえば、ラベルを持つページがあります。このラベルにはテキスト セットとして「ON」があります:

Label state = new Label("serverState", server.getStatus().getState());

server.getStatus().getState() は、この時点で「ON」を返します。

また、このページには、この「serverState」ラベルを 10 秒ごとに更新する JavaScript がいくつかあります。「OFF」に変更された可能性があります(javascriptによる)。

私の質問は次のとおりです。この「ラベルのテキストが変更されました」という通知を受け取る方法はありますか。テキストが変更された場合にのみ、別のコンポーネントを表示 (setVisible(true)) したいので、それが必要です。

4

4 に答える 4

2

カスタム AjaxEvent-Listener をラベルに追加できます。次に、スイッチを ON から OFF に変更してから元に戻した後、JavaScript でそのイベントをトリガーする必要があります。

Label state = new Label("serverState", server.getStatus().getState());
state.setMarkupId("mylabelid");
state.add(new AjaxEventBehavior("updatestateON") {
  protected void onEvent(AjaxRequestTarget target) {
    // Do something; switch is ON now
  }
});

state.add(new AjaxEventBehavior("updatestateOFF") {
  protected void onEvent(AjaxRequestTarget target) {
    // Do something; switch is OFF now
  }
});

Javascript では、スイッチの値が変更された後にこの関数を呼び出します。

function triggerWicket(newstate) {
  if (newstate == 'ON') {
    $('#mylabelid').trigger('updatestateON');
  } else {
    $('#mylabelid').trigger('updatestateOFF');
  }
}
于 2013-08-21T09:16:09.513 に答える
1

私は AbstractDefaultAjaxBehavior を使用し、サーバー側の更新を行います

AbstractDefaultAjaxBehavior updateState = new AbstractDefaultAjaxBehavior()
{
  @Override
  protected void respond(AjaxRequestTarget _target)
  {
    String newState = RequestCycle.get().getRequest().getRequestParameters().getParameterValue("state").toString();
    state.setDefaultModel(newState)
    _target.add(state);
  }
};

次に、ページの読み込み時に Web ページに JavaScript 関数を追加し、クライアントに JavaScript を呼び出し updateState(state); を呼び出します。新しい価値で。

@Override
public void renderHead(IHeaderResponse response)
{
    super.renderHead(response);
    response.render(JavaScriptHeaderItem.forScript("function updateState(state) {Wicket.Ajax.get({'u':'"+ updateState.getCallbackUrl() +"&state=' + state})}", "updateState"));
}
于 2013-08-21T07:46:36.390 に答える
0

Wicket はサーバー側の Web フレームワークです。コンポーネントのコンテンツまたは可視性を変更するには、サーバー側で変更された条件について知る必要があります。

サーバー上の server.getStatus().getState() があなたが言及した変更を反映すると仮定すると、 を使用AjaxSelfUpdatingTimerBehaviorしてページ上のコンポーネント (のサブセット) を X 秒/分/などごとに更新できます。(これは に基づいていますDuration)。

編集:そして、コンポーネントが更新されたとき(ajaxrequestに追加されたとき)、Robert Niestrojの回答を使用して、ajarequestに追加されたコンポーネントごとに(直接または階層によって)onConfigureが呼び出されるため、2番目のコンポーネントを表示するように設定できます。

于 2013-08-21T07:12:46.137 に答える