2011-08-15 1 views
1

私は2つのコンテナBEFOREとAFTERを持っています。ページがロードされると、BEFOREが表示され、AFTERは表示されません。Java Wicket AjaxFallbackLinkが表示された後にダブルクリックする必要があります

BEFOREには、BEFOREとAFTERを再描画し、BEFOREを非表示にしてAFTERを可視化するAjaxFallbackLinkが含まれています(可視性トリガー)。

AFTER内にAjaxFallbackLinkもあります。これは逆です:BEFOREとAFTERを再描画しますが、BEFOREとAFTERは見えなくします。

問題:AFTER内のリンクでは、必要なときにパネルを再描画するために2回のクリックが必要です。私は見つけることができるすべてのコンポーネントでtrueにsetOutputMarkupPlaceholderTagを設定しましたが、パネルを再描画するためにはAFTERリンクで2回のクリックが必要です。

これを解決する方法はありますか?

は、ここではいくつかの(簡体字)のコードです:

private class ViewDatesFragment extends Fragment<Campaign> { 
    private ViewDatesFragment(final MarkupContainer markupProvider) { 
     super("flightNoDates", "viewDatesFragment", markupProvider); 
     add(new AddDatesLink()); 
     setOutputMarkupPlaceholderTag(true); 
    } 

    private class AddDatesLink extends AjaxFallbackLink<Campaign> { 

     private AddDatesLink() { 
      super("addDates"); 

      add(new Label("startDate", "This is the start date").setOutputMarkupPlaceholderTag(true)); 
     setOutputMarkupPlaceholderTag(true); 
     } 

     @Override 
     public void onClick(final AjaxRequestTarget target) { 
      target.addComponent(viewDatesContainer.setVisible(false)); 
      target.addComponent(editDatesContainer.setVisible(true));    
    } 
    } 
} 

private class EditDatesFragment extends Fragment<Campaign> { 

    private EditDatesFragment(final MarkupContainer markupProvider) { 
     super("flightDates", "editDatesFragment", markupProvider); 

     add(new CancelDatesLink().setOutputMarkupPlaceholderTag(true)); 
     setOutputMarkupPlaceholderTag(true); 
    } 

    private class CancelDatesLink extends AjaxFallbackLink { 
     private CancelDatesLink() { 
      super("cancelDates"); 
      add(new Label("cancelDatesText", "cancel").setOutputMarkupPlaceholderTag(true)); 
      setOutputMarkupPlaceholderTag(true); 
     } 

     @Override 
     public void onClick(final AjaxRequestTarget target) { 
      target.addComponent(viewDatesContainer.setVisible(true)); 
      target.addComponent(editDatesContainer.setVisible(false)); 
     } 
    } 
} 
+0

コードを表示してください。 –

答えて

2

私は答えを発見:あなたはAJAXを使用しているとき、あなたのHTMLコンポーネント:今までに改札を使用しないでください。

常に実際のHTML要素を使用してください。

基本的には<wicket:component wicket:id="myId" /><div wicket:id="myId" />に変更し、すべて正常に機能しました。

+1

問題は、がページ上の実際の要素ではないことです。 AJAXはIDを与えられたページ上の要素を置き換える必要があります。そのため、 'setOutputMarkupId'が必要です。 上の 'setOutputMarkupId'呼び出しは、要素を持たないため不可能です。 – jbrookover

関連する問題