You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Peter Diefenthaeler <pd...@csc.com> on 2009/04/02 10:16:51 UTC
DropDownChoice and AJAX
Hallo,
I have a little problem with updating a DropDownChoice in a separate panel
with information coming from a modal window. The new value is not updated
in the DropDownChoice, only "new choice" is displayed when I come back from
the modal window.
Can you help me on this issue?
Thanks, Peter
P.S.:
Here is the code of of a short example, in real life I would like to use
objects from a database ...
>>>TestAppl.java<<<<
public class TestAppl extends WebApplication {
@Override
public Class<Test> getHomePage() {
return Test.class;
}
}
>>>Test.html<<<<
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Wicket Test</title>
</head>
<body>>
<span wicket:id="textLabel1"></span>
<form wicket:id="testForm">
<div wicket:id="namePanel"></div>
</form>
<div id="feedbackPanel">
<span wicket:id="feedback"></span>>
</div>
</body>
</html>
>>>>Test.java<<<<
public class Test extends WebPage {>>
public Test() {
add(new Label("textLabel1","WicketTest - DropDownChoice"));
Form testForm = new Form("testForm");
add(testForm);
testForm.add(new NamePanel("namePanel"));
add(new FeedbackPanel("feedback"));
}
}
>>>>NamePanel.html<<<<
<wicket:panel>
<select wicket:id="nameSelect">
<option>Peter</option>
</select>
<div
style="position:absolute;top:100px;left=20px;width:200px;height:50px;"
wicket:id="modalNameInput"></div>
<a href="#" wicket:id="new">new</a>
</wicket:panel>
>>>>NamePanel.java<<<<
public class NamePanel extends Panel {
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(NamePanel.class);
private ArrayList<String> names = new ArrayList<String>(Arrays.asList
("Peter","Stephan"));
private String selName = "Peter";
public NamePanel(String id) {
super(id);
final DropDownChoice ddc = new DropDownChoice("nameSelect", new
Model(selName), names););
ddc.setOutputMarkupId(true);
add(ddc);
final ModalWindow modalInput;
add(modalInput = new ModalWindow("modalNameInput"));
modalInput.setContent(new ModalNameInputPanel
(modalInput.getContentId(),modalInput,NamePanel.this));
modalInput.setTitle("Neuer Name ...");
modalInput.setInitialWidth(200);...
modalInput.setInitialHeight(100););
modalInput.setCloseButtonCallback(new
ModalWindow.CloseButtonCallback()
{
private static final long serialVersionUID = 1L;
public boolean onCloseButtonClicked(AjaxRequestTarget
target)
{
log.debug("CloseButton: " + selName);
return true;
}
});
modalInput.setWindowClosedCallback(new
ModalWindow.WindowClosedCallback()
{
private static final long serialVersionUID = 1L;
public void onClose(AjaxRequestTarget target)
{
target.addComponent(ddc);
log.debug("CloseCallback: " + selName);
}
});
add(new AjaxLink("new")
{
private static final long serialVersionUID = 1L;
public void onClick(AjaxRequestTarget target)
{
modalInput.show(target);
}
});
}
public void setSelName(String selName) {
this.selName = selName;
}
}
>>>>ModalNameInputPanel.html<<<<
<wicket:panel>
<div>
<form wicket:id="nameForm">
<label for="name">Name:</label>
<input id="name" wicket:id="nameIn" type="text" /><br/>.
<input type="submit" wicket:id="ok" value="ok"/>
<input type="reset" wicket:id="cancel" value="cancel"/>.
</form>
</div>
</wicket:panel>
>>>>ModalNameInputPanel.java<<<<
public class ModalNameInputPanel extends Panel {
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog
(ModalNameInputPanel.class);
private ModalWindow window;
private NamePanel namePanel;
private String nameIn = "Knut";
public ModalNameInputPanel(String id, final ModalWindow win,
NamePanel np) {
super(id);
this.window = win;
this.namePanel = np;
PropertyModel nameModel = new PropertyModel(this, "nameIn");
Form nameForm = new Form("nameForm");
add(nameForm);
nameForm.add(new TextField("nameIn",nameModel));,
nameForm.add(new NameSubmitLink("ok",true));
nameForm.add(new NameSubmitLink("cancel",false));
}
private class NameSubmitLink extends AjaxSubmitLink {
private static final long serialVersionUID = 1L;
private boolean save = false;
public NameSubmitLink(String id,boolean save) {;
super(id);
this.save = save;
if (!save)
setDefaultFormProcessing(false);
}
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
if (save) {
log.debug("New Name: " + nameIn);
namePanel.setSelName(nameIn);
}
window.close(target);
}
}}
}}}
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org