Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java wicket 1.5表单提交后的url,带状态页面_Java_Url_Wicket_Wicket 1.5 - Fatal编程技术网

Java wicket 1.5表单提交后的url,带状态页面

Java wicket 1.5表单提交后的url,带状态页面,java,url,wicket,wicket-1.5,Java,Url,Wicket,Wicket 1.5,我知道在这个(另一个)网站上有很多类似的问题,但没有一个能帮助我解决问题。 我有两个有状态的页面。页面的安装方式如下: mountPage(firstPath, firstPage.class); mountPage(secondPath, secondPage.class); Page secondPage = new secondPage(arg1, arg2); RequestCycle().setResponsePage(secondPage); 当第一次加载页面firstPage时

我知道在这个(另一个)网站上有很多类似的问题,但没有一个能帮助我解决问题。 我有两个有状态的页面。页面的安装方式如下:

mountPage(firstPath, firstPage.class);
mountPage(secondPath, secondPage.class);
Page secondPage = new secondPage(arg1, arg2);
RequestCycle().setResponsePage(secondPage);
当第一次加载页面firstPage时,它使用默认构造函数加载,url看起来就像所需的一样。提交第一页中的表单后,我将按如下方式转到有状态页面第二页:

mountPage(firstPath, firstPage.class);
mountPage(secondPath, secondPage.class);
Page secondPage = new secondPage(arg1, arg2);
RequestCycle().setResponsePage(secondPage);
虽然已装入第二个页面,但生成的页面(第二个页面)呈现以下url:

context?21-1.IFormSubmitListener-componentName-childComponentName-childComponentName-someForm
我想要的是使用我定义的挂载路径呈现第二个页面。 我知道这是一个有状态的页面,为了让wicket加载它的确切实例,url必须是有状态的。我不介意在url中有一个页面版本和id,我只是不想在url中有这么长的丑陋组件路径。 另外,我不明白为什么我需要第二页url中第一页的表单路径

据我所知,wicket 1.4 HybridUrlCodingStrategy可以做类似的事情,但我在wicket 1.5中找不到任何方法。 这可能和wicket有关吗

任何帮助都将不胜感激,因为这真的阻碍了我,我已经花了太多时间试图解决它,但运气不佳。

尝试替换:

Page secondPage = new secondPage(arg1, arg2);
RequestCycle().setResponsePage(secondPage);
与:

应该在我的头顶上工作

编辑: 刚才注意到您正在传递参数,在这种情况下,您需要将secondPage更改为类似以下内容:

class secondPage extends WebPage
{
    public secondPage(PageParameters params) //Instead of secondPage(Type1 arg1, Type2 arg2)
    {
        arg1Type arg1 = params.get(0).to*{arg1Type}*();
        arg2Type arg2 = params.get(1).to*{arg2Type}*();
    }
}
然后打电话:

PageParameters params = new PageParameters();
params.set(0, arg1);
params.set(1, arg1);
RequestCycle().setResponsePage(secondPage.class, params);

你的建议的问题是arg1和arg2是复杂的java对象,而PageParameters只处理StringValue,因此每当我尝试向PageParameters添加/获取我的args时,我都会得到一个ClassCastException。公平地说,我发现这一点:它基本上建议传递一个唯一的ID,该ID可用于重建参数。如果无法将对象持久化到数据库并检索它,请尝试序列化它。。。不太理想,您也可以尝试以下方法:首先,您可以同时使用两个构造函数,其中parmas调用第二个构造函数。您仍然需要一种方法将Java对象转换为基本类型,以便将其传递给第二个构造函数。。。我刚刚有了另一个想法,您可以在请求之间的会话中存储对象。请尝试调整以下内容:。虽然不确定这是否是一个特别好的实践,但我非常确定这是针对在整个会话中持续存在的对象,而不仅仅是在页面请求中。。。我假设不可能重构代码,使其全部在一个页面上?谢谢大家。我可以将参数持久化到会话/数据库中,但是,我想知道是否有更简单的内置wicket解决方案。再次感谢你,一如既往地感谢你的帮助。