2017-08-17 28 views
0

私はlistViewレンダリング時にある条件でリフレッシュする必要があるパネル(たとえばAlertPanel)を持っています。Apache Wicketの別のListViewからPanelをリフレッシュするにはどうすればよいですか?

onBeforeRender() listviewのライフサイクルメソッドで更新すると考えています。私はthis.getPage().get("alertPanel")を持っていたら、私は私が再描画/ AlertPanel

をリフレッシュすることができるように呼び出すことが org.apache.wicket.markup.html.panel.PanelのどのようなAPIを知らないthis-

  @Override 
      protected void onBeforeRender() { 
       super.onBeforeRender(); 
       // update alert panel with some API of Component here 
       // I can get panel object like this 'this.getPage().get("alertPanel");' 
      } 

ようonBeforeRender()を上書きしようとしてい

+0

あなたのために使用するreplaceコンポーネントを使用します。このリンクをチェックしてくださいhttps ://ci.apache.org/projects/wicket/guide/6.x/guide/componentLifecycle.html。しかし、まだ私はあなたが 'AlertPanel'と呼んでいる方法にはまだ満足していません – soorapadman

+0

返信ありがとうございますが、参照するのが難しくなるので、すべてを1つのコメントに入れてください。また、私の方法でパネルを参照することが良くない理由を指定してください。 – Vishal

+0

@soorapadmanこのような問題は何ですか?より良い提案をしてください、そして、 'this.getPage()。get(" alertPanel ")'が 'Component'を返すので、replaceは利用できません。私はそれをキャストすることができますが、コンポーネントが既にreplaceWith()を持っているので、私は試しても動作しません。 – Vishal

答えて

1

レンダリングが開始されている場合(onBeforeRender()があると思われます)、コンポーネントを置き換えることはできません。

ロジックをACTIONフェーズに移行する必要があります。 onClick()、onSubmit()など。このようなアクションメソッドでは、イベント:send(getPage(), Broadcast.DEPTH, new SomeCustomEvent())をブロードキャストします。次に、AlertPanelの親のいずれかで、#onEvent(IEvent)をオーバーライドし、イベントペイロードがSomeCustomEventの場合は、置換えを行います。詳細情報については

を読む: 1)複雑な1:使用リスナー 2)または使用のオーバーライド、このような:

AlertPanel alertPanel = new AlertPanel(); 
alertPanel.setOutputMarkupId(true); 

ListView list = new MyListView(){ 
    @Override 
    protected onMyEvent(AjaxRequestTarget target){ 
     target.add(alertPanel); 
    } 
} 

page.add(alertPanel,list); 

onMyEvent()メソッドhttps://ci.apache.org/projects/wicket/guide/7.x/single.html#_wicket_events_infrastructure

+0

あなたは正しい方法です。コンポーネントが同じページの場合、なぜ 'broadcast'イベントを使う必要があるのでしょうか? 'target.add(alertPanel)'十分な権利ですか?私が間違っているなら、私を許してください。 – soorapadman

+0

コンポーネント間に参照がある場合、イベントは必要ありません。しかし、かなりの頻度でページは、互いに何も知らない別々のコンポーネント/コンテナで構築されています。密接な結合を避けるために、メッセージ、つまりイベントによって通信することをお勧めします。 –

0

は2つの方法がありますMyListViewのalertPanelを更新したい場所で呼び出す必要があります(たとえば、ボタンがいくつかの行で押されたときなど)

関連する問題