powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Wicket 6 ( очистка полей формы )
3 сообщений из 3, страница 1 из 1
Wicket 6 ( очистка полей формы )
    #38460323
Vadimus___
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.

Использую Wicket 6.11.0.
На страницу добавил собственный компонент - диалоговое окно. Диалоговое окно реализовано на основе Twitter Bootstrap Modal Window. Его темплейт :


BaseDialog.html

<html xmlns:wicket=" http://wicket.apache.org">
<body>
<wicket:panel>
<div wicket:id="myModal" class="modal hide fade" tabindex="-1"
role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">X</button>
<h4 id="myModalLabel">Modal header</h4>
</div>
<div wicket:id="childContent" class="modal-body container">
<form wicket:id="dlgForm">
<div wicket:id="feedback"></div>
<wicket:child />
</form>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn" wicket:id="sbmtBtn">Save changes</button>
</div>
</div>
</wicket:panel>
</body>
</html>

Джава класс :

BaseDialog.java


package com.nauhau.components.BaseDialog;

import java.util.HashMap;
import java.util.Map;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.StatelessForm;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.odlabs.wiquery.core.javascript.JsScope;

import de.agilecoders.wicket.core.Bootstrap;

public class BaseDialog extends Panel {

private WebMarkupContainer dialogDiv;
private AbstractDefaultAjaxBehavior beforeOpen;
private IndicatingAjaxButton sbt;
private Form<Void> form;
private FeedbackPanel fpanel;

/**
*
*/
private static final long serialVersionUID = -7300515046330284598L;

@SuppressWarnings("serial")
public BaseDialog(String id) {
super(id);

this.dialogDiv = new TransparentWebMarkupContainer("myModal");
this.dialogDiv.setOutputMarkupId(true);
this.dialogDiv.setMarkupId("myModal");

this.add(dialogDiv);

form = new Form<Void>("dlgForm");


form.setOutputMarkupId(true);
form.setMarkupId("dlgForm");

dialogDiv.add(form);

TransparentWebMarkupContainer ch = new TransparentWebMarkupContainer(
"childContent");
ch.setMarkupId("childContent");
ch.setOutputMarkupId(true);
dialogDiv.add(ch);
ch.add(form);

this.sbt = new IndicatingAjaxButton("sbmtBtn", form) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
form.success("asdasdas");
target.add(fpanel);
}

@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
form.error("error");
target.add(fpanel);
}

};

fpanel = new FeedbackPanel("feedback");
fpanel.setOutputMarkupId(true);
form.add(fpanel);

form.setDefaultButton(this.sbt);

this.sbt.setMarkupId("sbmtBtn");
this.sbt.setOutputMarkupId(true);
this.sbt.setDefaultFormProcessing(true);

dialogDiv.add(this.sbt);
// form.add(this.sbt);

this.beforeOpen = new AbstractDefaultAjaxBehavior() {

@Override
protected void respond(AjaxRequestTarget target) {
OnBeforeOpen();
target.add(form);
}
};

this.fpanel.add(this.beforeOpen);

}

public JsScope GetOpenDialogScope() {

Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("beforeOpenUrl", this.beforeOpen.getCallbackUrl());
parameters.put("dialogId", this.dialogDiv.getMarkupId());

return JsScope.quickScope("$.ajax({" + " async : false," + "url : '"
+ this.beforeOpen.getCallbackUrl() + "'}).done(function() {});"
+ "$('#" + this.dialogDiv.getMarkupId() + "').modal();"

);
}

protected void OnBeforeOpen() {

}

@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
Bootstrap.renderHead(response);
}
}

После отнаследовался от базового диалога :

AddDepartment.java


package com.nauhau.components;

import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.spring.injection.annot.SpringBean;

import com.nauhau.Models.DepartmentsModel;
import com.nauhau.components.BaseDialog.BaseDialog;
import com.nauhau.components.SchTree.SchTree;
import com.nauhau.services.IDepartmentService;

public class AddDepartmentDlg extends BaseDialog {

/**
*
*/

@SpringBean(name = "departmentService")
private IDepartmentService depSrv;
private TextField<String> name;
private TextField<String> descr;
private SchTree tree;


private static final long serialVersionUID = 1L;

public AddDepartmentDlg(String id) {
super(id);

this.name = new RequiredTextField<String>("depName");
this.name.setMarkupId("depName");
this.name.setOutputMarkupId(true);

this.descr = new TextField<String>("depDescr");
this.descr.setMarkupId("depDescr");
this.descr.setOutputMarkupId(true);


this.add(this.name);
this.add(this.descr);

}

@Override
protected void OnBeforeOpen() {

this.name.modelChanged();


this.descr.modelChanged();

}

}

AddDepartment.Html

<html xmlns:wicket=" http://wicket.apache.org">
<head></head>
<body>
<div>
<wicket:extend>
<div class="row">
<div class="span1 ">Name:</div>
<div class="span5">
<input wicket:id="depName" type="text" />
</div>
</div>
<div class="row">
<div class="span1">Description:</div>
<div class="span5">
<input wicket:id="depDescr" type="text" />
</div>
</div>

</div>
</body>
</html>


Потом добавил диалог AddDepartmentDlg на одну из моих страниц. Перед поднятием диалога
у меня дергается AbstractDefaultAjaxBehavior "beforeOpen" в котором я хочу очитсить все поля моей формы, но этого не происходит.

Подскажите пожалуйста , какая правильная последовательность действий нужна для очистки
полей формы , уже пробовал добавлять AbstractDefaultAjaxBehavior к разным компонентам базового диалога и к самому диалогу, пробовал вызывать setmodelChanged на элементах формы, ничего не помогает.

Спасибо)
...
Рейтинг: 0 / 0
Wicket 6 ( очистка полей формы )
    #38461404
mesier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wicket - это stateful компонентный фрэймворк. Хранить состояние компонентов - это одно из его ключевых правил. А вы хотите заставить его работать как простой http.. ))
В учебнике где-то даже картинка была, что внутри себя он хранит объекты-компоненты и когда их снова запрашивают, возвращает готовые. Лень искать сейчас... Поэтому единственный способ показать объект без предыдущего или более раннего состояния - это создать новый. Тут обсуждается: http://apache-wicket.1842946.n4.nabble.com/clearing-a-TextField-td1867189.html . Если правильно понял, это ваша проблема как раз..
...
Рейтинг: 0 / 0
Wicket 6 ( очистка полей формы )
    #38461634
Vadimus___
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mesier,
ок, понял, спасибо за вектор) буду копать в этом направлении)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Wicket 6 ( очистка полей формы )
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]