したがって、これはあまり一般的な質問ではありませんが、次の再利用可能な改札コンポーネントを構築できるように、アーキテクチャに関するいくつかのポインタを教えてくれる人がいることを期待していました。
これがskitchのラフスケッチです:
https://skitch.com/cmagnollay/8sn2s/multitextform
私は知っています、素晴らしい絵ですよね?したがって、基本的に、このフォームコンポーネント(これは使用するのに適切なクラスだと思います)を使用して、ユーザー定義の数の入力をフォームに追加します。ユーザーがTextInputFieldの横にある-ボタンを押すと、そのinputFieldが削除されます。+ボタンを押すと、新しい空白のフィールドが追加されます。明らかに、ユーザーがボタンをクリックしたときにコンポーネントがAJAXを使用してコンポーネントを更新する必要がありますが、私の問題はこれをどのように構成するかです。これは1つのクラスですか?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コンポーネントの作成について考えることに慣れようとしています。私はOOについて多くの経験がありますが、特に改札についてはそうではありません。助けと指示をありがとう!