2014-10-28 64 views
4

在我的項目中,我有50多個表單,它們大多是相互對應的,並使用相同的DropDownChoice組件。我可以創建單獨的Panel,在那裏我定義我的DropDownChoice,之後我將在另一個表單中使用Panel?否則,我該如何執行這種情況?Wicket表單中可重複使用的DropDownChoice

例如

form1有下一個字段:
TextField
TextField
城市DropDownChoice

form2有接下來的字段:
代碼TextField
金額TextField
城市(再次同DropDownChoice

我要讓這種做法的美麗解決方案。

回答

5

最好使用您的預定義參數來擴展DropDownChoice,而不是使用DropDownChoicePanel

有此做法至少有兩個好處:

  1. 你並不需要創建單獨的標記文件,因爲它帶有Panel -approach。
  2. 您可以直接使用DropDownChoice方法。否則,您應該轉發諸如Panel的方法之類的方法,或者爲DDC實施getter方法。

所以,這將是更好的東西是這樣的:

public class CityDropDownChoice extends DropDownChoice<City> // use your own generic 
{ 

    /* define only one constructor, but you can implement another */ 
    public CityDropDownChoice (final String id) 
    { 
     super (id); 

     init(); 
    } 

    /* private method to construct ddc according to your will */ 
    private void init() 
    {   
     setChoices (/* Your cities model or list of cities, fetched from somewhere */); 
     setChoiceRenderer (/* You can define default choice renderer */); 

     setOutputMarkupId (true); 

     /* maybe add some Ajax behaviors */ 
     add(new AjaxEventBehavior ("change") 
     { 
      @Override 
      protected void onEvent (final AjaxRequestTarget target) 
      { 
       onChange (target); 
      } 
     }); 
    } 

    /*in some forms you can override this method to do something 
     when choice is changed*/ 
    protected void onChange (final AjaxRequestTarget target) 
    { 
     // override to do something. 
    } 
} 

而在你的形式簡單地使用:

Form form = ...; 
form.add (new CityDropDownChoice ("cities")); 

認爲這種做法將滿足您的需求。

+1

爲了解決這個問題,如果你願意**在你的下拉菜單中想要特殊的標記,那麼'Panel'就是要走的路。 – biziclop 2014-10-28 14:53:54

+0

@biziclop,同意。 – 2014-10-28 15:07:26

相關問題