#java #button #wicket #textfield
#java #кнопка #калитка #текстовое поле
Вопрос:
Кто-нибудь может указать мне здесь правильное направление. Я хочу, чтобы изначально было, скажем, 2 текстовых поля, тогда пользователь сможет нажать кнопку «Добавить», и будут отображены еще 2 текстовых поля (это должно быть динамичным, поскольку пользователь может щелкнуть один или 100 раз, например)
Комментарии:
1. вероятно, вам следует повторно пометить свой вопрос или, по крайней мере, сказать, о каком языке кодирования вы говорите
Ответ №1:
Поскольку это wicket, это должна быть Java… Я бы переназначил это, но для этого моя учетная запись является новой…
Поместите ваши исходные модели текстовых полей в один объект-оболочку и добавьте его в список (таким образом, содержащий только один элемент) и отобразите этот список в ListView. В событии onClick вашей кнопки добавьте еще один из этих объектов-оболочек в свой список и обновите ListView.
Что-то вроде
public class TwoTextFields {
private IModel textFieldOne;
private IModel textFieldTwo;
[... constructor, getters setters here ...]
и
public class MyPanel extends Panel {
private List<TwoTextFields> list = new ArrayList<TwoTextFields>();
public MyPanel(String id) {
super(id);
add( New ListView<TwoTextFields>("list", list) {
@Override
protected populateItem(Item<TwoTextFields> item) {
add( new TextField("fieldOne", new PropertyModel(item, "textFieldOne");
add( new TextField("fieldTwo", new PropertyModel(item, "textFieldTwo");
}
});
add( new Button("button) {
@Override
protected void onClick() {
list.add(new TwoTextFields());
}
});
}
Я не знаю, компилируется ли это… Это просто для того, чтобы дать вам идею, я не хотел запускать eclipse для этого…
Комментарии:
1. Это позволило бы перезагрузить страницу вместо обновления через Ajax, что могло бы быть чище. Должно сработать, хотя 🙂
2. Почему вспомогательный класс TwoTextFields использует экземпляры IModel в качестве своих свойств, а не просто String?
3. @jbrookover: да, этот пример не имеет ajaxified, но поскольку в wicket это просто шаблон, а приведенный пример — это всего лишь пример, а не самостоятельное решение, я подумал, что этого будет достаточно
4. @ireddick: Две причины…. a) таким образом, вы можете использовать тот же код для добавления флажков и любого другого элемента формы, который вам нравится, просто добавив некоторые общие элементы в оболочку. б) Текстовые поля Wicket могут содержать гораздо больше, чем просто строки. Используя модель, вы можете легко получить доступ к возможностям преобразования wicket, чтобы использовать эти поля также для чисел и т.д.
5. спасибо за пример кода, который натолкнул меня на хорошую идею. Спасибо!