2014-06-18 36 views
1

我寫這篇文章的代碼:創建Wicket的組件嵌入文本字段及其FeedbackPanel

的Java文件:

TextField<String> input1 = (TextField<String>) new TextField<>("input1", Model.of("")).add(new UrlValidator()); 
TextField<String> input2 = (TextField<String>) new TextField<>("input2", Model.of("")).add(new UrlValidator()); 
add(new Form<>("form").add(
    new FeedbackPanel("feedbackInput1").setFilter(new ComponentFeedbackMessageFilter(input1)), 
    new FeedbackPanel("feedbackInput2").setFilter(new ComponentFeedbackMessageFilter(input2)), 
    input1, 
    input2 
)); 

模板文件:

<form wicket:id="form"> 
    <!-- first --> 
    <div> 
     <wicket:panel wicket:id="feedbackInput1" /> 
     <label for="input1">Input 1: 
      <input type="text" wicket:id="input1" id="input1" /> 
     </label> 
    </div> 
    <!-- second --> 
    <div> 
     <wicket:panel wicket:id="feedbackInput2" /> 
     <label for="input2">Input 2: 
      <input type="text" wicket:id="input2" id="input2" /> 
     </label> 
    </div> 

     <div> 
      <button type="submit">Submit</button> 
     </div> 
    </form> 

爲了避免冗餘,我想創造一個組件(例如:TextFieldWithFeedback),我可以這樣使用:

Java文件:

TextField<String> input1 = (TextField<String>) new TextField<>("input1", Model.of("")).add(new UrlValidator()); 
TextField<String> input2 = (TextField<String>) new TextField<>("input2", Model.of("")).add(new UrlValidator()); 
add(new Form<>("form").add(
    new TextFieldWithFeedback("input1", "Input 1: ", input1), 
    new TextFieldWithFeedback("input2", "Input 2: ", input2) 
)); 

模板文件:

<form wicket:id="form"> 
    <!-- first --> 
    <div wicket:id="input1" /> 
    <!-- second --> 
    <div wicket:id="input2" /> 
</form> 

我想創建能夠管理一個TextField及其feedbackPanel一個Wicket組件,我該怎麼辦?

+0

歡迎來到StackOverflow!在這個網站中,如果你清楚地說出什麼在你嘗試過的方面不起作用,你會得到更多相關的答案。 –

+0

謝謝:)我嘗試使用面板,邊框,但我無法做到我想要的,所以我正在尋找正確的方式來做到這一點,或至少有一個軌道... – Calfater

+0

爲什麼面板不起作用? – RobAu

回答

1

尋找類FormComponent。你可以做這樣的事情:

public class FeedbackTextField<T> extends FormComponent<T> { 

    public FeedbackTextField(String id) { 
     this(id, null); 
    } 

    public FeedbackTextField(String id, IModel<T> model) { 
     super(id, model); 

     TextField<T> tf = new TextField<T>("tx"); 
     add(tf); 
     add(new FeedbackPanel("fb").setFilter(new ComponentFeedbackMessageFilter(tf))); 
    } 
} 

FormComponent就像一個面板,所以你需要添加自己的HTML文件,這個類也。然後,您可以將此組件添加到表單。

form.add(new FeedbackTextField<String>("input1", Model.of("")));