所以这不是一个非常普遍的问题,但我希望有人能给我一些关于架构的指导,以便我可以构建以下可重用的检票口组件。
这是skitch上的粗略草图:
https://skitch.com/cmagnollay/8sn2s/multitextform
我知道,画得很棒吧?所以本质上,这个表单组件(我认为这是使用正确的类)将用于在表单上添加用户定义的输入数量。当用户点击 TextInputField 旁边的 - 按钮时,它会删除该 inputField。当他们点击 + 按钮时,会添加一个新的空白字段。显然,当用户单击按钮时,组件将需要使用 AJAX 来更新组件,但我的问题是如何构建它。这是一节课吗?两个(一个用于整个组件,一个用于带有 - 按钮的输入字段),我应该使用哪些类来执行此操作?我希望对象尽可能通用以促进重用。这是我到目前为止所拥有的:
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 方面有很多经验,但并不是特别在 wicket 方面。感谢您的帮助和指导!