これは非常に一般的な質問ではありませんが、私は次の再利用可能なWicketコンポーネントを構築することができるように、再利用可能なWicketコンポーネントを構築する
https://skitch.com/cmagnollay/8sn2s/multitextform
私が知っている、偉大な描画右:
ここスキッチのラフスケッチはありますか?したがって、本質的に、このフォームコンポーネント(私はこれが正しいクラスであると思います)を使用して、ユーザー定義の入力数をフォームに追加します。ユーザーがTextInputFieldの横にある - ボタンを押すと、そのinputFieldが削除されます。彼らが+ボタンを押すと、新しい空欄が追加されます。ユーザーがボタンをクリックしたときに、コンポーネントがAJAXを使用してコンポーネントを更新する必要があることは明らかですが、これを構造化する方法が問題です。これは一つのクラスですか? 2つ(1つはコンポーネント全体、もう1つは - ボタン付きの入力フィールド)、これを行うためにどのクラスを使用する必要がありますか?私は、オブジェクトをできるだけ一般的にして再利用を促進したいと思います。
public class MultiTextInput<T> extends FormComponent<List<T>>
{
private static final long serialVersionUID = 1L;
private final String removeInputButtonName = "removeInputButton";
private final String addInputButtonIdName = "addInputButton";
private int numInputs = 1;
private List<TextField<T>> inputFieldList = new ArrayList<TextField<T>>();
public MultiTextInput(String id, IModel<T> model)
{
super(id);
inputFieldList.add(new TextField<T>("input1", model));
add(inputFieldList.get(0));
addAddInputFieldMarkup();
}
/**
* Adds an "add" button.
*/
private void addAddInputFieldMarkup()
{
Button addInputButton = new Button(this.addInputButtonIdName + numInputs);
addInputButton.add(new AjaxFormComponentUpdatingBehavior("onclick"){
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target)
{
numInputs++;
inputFieldList.add(new TextField<T>("input" + numInputs));
target.add(MultiTextInput.this);
}
});
}
/**
* Adds a "remove" button.
*/
private void addRemoveInputFieldMarkup()
{
Button removeInputButton = new Button(this.removeInputButtonName + numInputs);
removeInputButton.add(new AjaxFormComponentUpdatingBehavior("onclick"){
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget arg0)
{
// TODO Auto-generated method stub
}
});
}
}
私が言ったように、私はちょうどWicketのコンポーネントを作ることを考えに慣れるしようとしています:ここで私はこれまで持っているものです。私はオブジェクト指向と多くの経験がありますが、特にウィッケットではありません。どんな助けと方向性もありがとう!
これは実際には、より大きな形式の1つの入力コンポーネントであると考えられています。そのため、私はスーパークラスとしてformcomponentを使うべきだと思ったのです。私の質問ではっきりしていない場合は申し訳ありませんが、私にlistviewのドキュメントをチェックさせてください。レスポンスありがとう! – thatidiotguy
まあ、ListViewで簡単に同じ動作を実現できるのであれば、なぜ新しいFormComponentを作成するのが面倒なのかわかりません。しかし、FormComponentPanel(http://wicket.apache.org/apidocs/1.5/org/apache/wicket/markup/html/form/FormComponentPanel.html) –
をチェックすることができます。あなたは、私が探している振る舞いが、それが自分自身のオブジェクトであっても価値がないというリストビューに似ていることを意味します。私はコードを最初のものから午前中に試してみます。努力とアドバイスありがとう! – thatidiotguy