所以這不是一個很普遍的問題,但我希望有些人可以給我一些關於體系結構的指導,以便我可以構建下列可重用的檢票組件。構建可重複使用的檢票組件
這裏是skitch草圖:
https://skitch.com/cmagnollay/8sn2s/multitextform
我知道,偉大的圖畫吧?所以本質上,這個表單組件(我認爲這是正確的類)將被用來在表單上添加用戶定義的輸入數量。當用戶點擊TextInputField旁邊的 - 按鈕時,它將刪除該inputField。當他們按下+按鈕時,會添加一個新的空白字段。很顯然,當用戶單擊按鈕時,組件需要使用AJAX來更新組件,但我的問題是如何構造這個組件。這是一堂課嗎?兩個(一個用於整個組件,一個用於使用 - 按鈕的inputfield),我應該使用什麼類來執行此操作?我希望該對象儘可能通用以促進重用。以下是我迄今爲止:
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組件。我在面向對象方面有很多經驗,但並不特別關注門票。感謝您的幫助和指導!
這實際上應該是一個更大形式的輸入組件。這就是爲什麼我認爲我應該使用formcomponent作爲超類。對不起,如果我不清楚我的問題,但讓我看看listview文檔。感謝您的迴應! – thatidiotguy 2012-04-26 21:11:00
嗯,我只是不明白爲什麼你會想要通過創建一個新的FormComponent的麻煩,如果你可以輕鬆實現與ListView相同的行爲。但你可以看看FormComponentPanel(http://wicket.apache.org/apidocs/1.5/org/apache/wicket/markup/html/form/FormComponentPanel.html) – 2012-04-26 21:20:39
啊我明白你的意思了。你的意思是我所尋找的行爲與列表視圖非常相似,甚至不值得它自己的對象。我會在早晨第一時間嘗試編碼。感謝您的努力和建議! – thatidiotguy 2012-04-26 21:50:02