2011-07-25 14 views
1

値を含むパレットを作成しました。選択リストを更新するためにAjaxFormComponentUpdatingBehaviorを使用してDropDownChoice ddcdomainesを作成しましたが、それを行う方法はわかりません。Wicket palette with dropdownchoice

ここに私のコード:

List<PartnerDomainDTO> domaines = partenaireHelper.allDomains(); 
    ChoiceRenderer choiceRenderer = new ChoiceRenderer("label", "sid"); 

    final Palette palette = 
     new Palette("partenaires", new PropertyModel(offre, "partenaires"), new Model(
      (Serializable) partenairesPossibles), renderer, 10, false) { 
      private static final long serialVersionUID = 1178320215146881229L; 

      boolean first = true; 

      @Override 
      public Iterator getSelectedChoices() { 
      if (first) { 
       first = false; 
       return partenairesExistants.iterator(); 
      } 
      return super.getSelectedChoices(); 
      } 
     }; 
    palette.setOutputMarkupId(true); 
    palette.setOutputMarkupPlaceholderTag(true); 

    DropDownChoice ddcdomaines = new DropDownChoice("domaines", new Model(domaines.get(0)), domaines, choiceRenderer); 

    ddcdomaines.add(new AjaxFormComponentUpdatingBehavior("onchange") { 
     @Override 
     protected void onUpdate(AjaxRequestTarget target) { 
     remove(palette); 
     Palette palette1 = 
      new Palette(
       "partenaires", 
       new PropertyModel(offre, "partenaires"), 
       new Model(new ArrayList<Partenaire>()), 
       renderer, 
       10, 
       false); 
     palette1.setOutputMarkupId(true); 
     palette1.setOutputMarkupPlaceholderTag(true); 
     add(palette1); 
     target.addComponent(palette); 
     target.addComponent(palette1); 
     } 
    }); 
    add(palette); 
    add(ddcdomaines); 
    } 

答えて

3

ここではAjaxFormComponentUpdatingBehaviorとDropDownChoiceの優れた例です。

http://wicketstuff.org/wicket/ajax/choice

ソースを見るためにソースコードのリンクをクリックしてください。より多くの情報が必要な場合は、質問に詳細を記入する必要があります。

更新:JavaDocのによると、アヤックスを使用してパレットを更新するための具体的な方法があります:

http://wicket.apache.org/apidocs/1.4/org/apache/wicket/extensions/markup/html/form/palette/Palette.html

あなたが何かを行う前に、これらの指示に従っていることを確認します。

コードでは、1つのパレットを削除して別のパレットに配置しようとしています。これは長期的にはうまくいくかもしれませんが、それはあまりWicket-yではありません。悲しいことに、パレットには選択肢を変更するパブリックメソッドがありません。ただし、choicesModelへの参照を保持している場合は、そのリストを変更することができ、パレットは再レンダリング時にその変更を確認する必要があります。このような何か:

final Model<List<String>> choicesModel = new Model<List<String>>(partenairesPossibles) 

final Palette palette = new Palette("partenaires", new PropertyModel(offre, "partenaires"), choicesModel, renderer, 10, false) {...}; 

そして、あなたのAjaxにonUpdate

choicesModel.setObject(/* Insert your other list */); 
target.addComponent(palette); 

では、選択した選択肢と可能な選択肢を追跡するには注意してください。これらが一致しないとどうなるかわからない。希望が助けてくれる!

+0

ありがとう、私は(dropdownchoiceとパレット)を使用している例のようにしようとしましたが、私は望む結果を得ることができなかった、私もsetVisible(trueまたはfalse)のような単純なアクションを作ろうとしたパレットを隠すが、setVisibleが真のときは何もなかった。それはまだ隠されていた!これについて何か考えてもらえますか? – Mohamed

+0

パレットで 'setOutputMarkupPlaceholderTag(true)'を呼び出しましたか? Ajax呼び出しを使用して再び表示されるすべてのコンポーネントに必要です。 – biziclop

+0

@モハメドあなたのコードの一部を見せて、元の投稿を自由に編集してください。間違っている可能性がある約1.83億ものがあります:) – jbrookover

関連する問題