【问题标题】:Wicket - Back button after form submitWicket - 表单提交后的返回按钮
【发布时间】:2012-05-24 08:17:10
【问题描述】:

我遇到了有关表单和“返回”按钮的新问题。

采取这种形式:

public SearchSomethingForm() {
super(ORSAWebConstants.FORM);
setModel(new CompoundPropertyModel<Void>(this));

add(section01Panel);
add(section02Panel);
add(section03Panel);
add(new SubmitButton());

}

如您所见,我没有基于单个对象的属性模型。

在表单中,我只添加了一些面板,里面有一些 INPUT。例如:

private String name;
protected void onInitialize() {
 super.onInitialize();
 final TextField<String> foo = new TextField<String> ("name",new PropertyModel<String>(this,"name"));
 add (foo);
}

每个 Panel 代码都有类似的内容。一些带有 BIND 的输入到本地属性。

然后在 FORM SUBMIT 中,我可以读取值

section01Panel.getName();

问题

表单提交后,我打开一个带有结果的新页面。我想要一个返回按钮到 FORM 的页面,每个预先输入的字段都已经编译,因此用户只需更改表单的一部分即可进行新的搜索。

如果没有特定的 PropertyModel,我就无法编译对象,并将其属性映射到表单字段上。表单不知道会添加哪种类型的 FIELD。

我该如何解决这个问题?

【问题讨论】:

  • 将状态存储在各种组件中而不是单个专用状态对象中是否有特定原因?

标签: java forms wicket


【解决方案1】:

经过一些测试,我发现 Wicket 可以从页面传递整个页面,所以当我调用新页面时,我传递了表单页面:

SheetPage page = new SheetPage("SheetPage", idPojo,FormPage.this);
setResponsePage(page);

在 SheetPage 中,我将有一个指向上一页的链接:

public SheetPage(String title, String idPojo, final FormPage fPage) {
    Link back = new Link("back"){
       private static final long serialVersionUID = 1L;

       public void onClick() {
         setResponsePage(fPage);
      };
    };
}

当我返回 FormPage 时,我会发现该页面与打开表单页面之前完全一样,并且表单已完全预编译。太棒了!

【讨论】:

    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 2018-02-21
    • 2011-12-06
    • 2013-08-20
    • 2011-10-23
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多