Tabs 我的Wicket标签床面板没有';不保留表单字段值

Tabs 我的Wicket标签床面板没有';不保留表单字段值,tabs,wicket,Tabs,Wicket,我刚开始使用ApacheWicket。我正在创建一个面板来添加网站上的文章。编辑文章的“我的面板”由选项卡式面板组成:第一个选项卡用于编辑,第二个选项卡用于预览文章 如果在编辑器(textarea)中输入一些文本后,切换到预览并返回编辑器,则le textarea为空 下面是带有TabbedPanel的面板的部分代码: publicAddArticlePanel(字符串id,ArticleEdit-ArticleEdit){ 超级(id); 最终列表列表列表=新的ArrayList(); 添加(

我刚开始使用ApacheWicket。我正在创建一个面板来添加网站上的文章。编辑文章的“我的面板”由选项卡式面板组成:第一个选项卡用于编辑,第二个选项卡用于预览文章

如果在编辑器(textarea)中输入一些文本后,切换到预览并返回编辑器,则le textarea为空

下面是带有TabbedPanel的面板的部分代码:

publicAddArticlePanel(字符串id,ArticleEdit-ArticleEdit){
超级(id);
最终列表列表列表=新的ArrayList();
添加(新的抽象选项卡(新模型(“编辑器”)){
@凌驾
公共WebMarkupContainer getPanel(字符串panelId){
返回新的ArticleEditorPanel(面板ID,articleEdit);
}
});
tabList.add(新抽象选项卡(新模型(“预览”)){
@凌驾
公共WebMarkupContainer getPanel(字符串panelId){
返回新的ArticlePreviewPanel(面板ID,articleEdit);
}
});
tabs=新选项卡面板(“选项卡”,tabList);
最终提交链接提交按钮=新提交链接(“提交”){
@凌驾
提交时公共无效(){
//待办事项
}
};
addArticleForm=新表单(“添加文章表单”,新模型(articleEdit));
addArticleForm.add(选项卡);
addArticleForm.add(提交按钮);
添加(添加条款格式);
}
下面是编辑器面板的HTML:


标题
正文
关键词
此编辑器面板的代码:

public ArticleEditorPanel(字符串id,ArticleEdit-ArticleEdit){
超级(id);
最终反馈面板反馈面板=新反馈面板(“反馈”);
标题=新文本字段(“标题”,新属性模型(articleEdit,“标题”);
title.setRequired(true);
text=新文本区(“text”,新属性模型(articleEdit,“text”);
text.setRequired(true);
关键词=新文本字段(“关键词”,新属性模型(articleEdit,“关键词”);
关键词.setRequired(true);
增加(标题);
添加(文本);
添加(关键词);
添加(反馈面板);
}
最后,ArticleEdit类的源代码:

公共类ArticleEdit实现可序列化{
私有字符串标题;
私有字符串文本;
私有字符串关键字;
私有字符串预览;
公共字符串getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共字符串getText(){
返回文本;
}
公共void setText(字符串文本){
this.text=文本;
}
公共字符串getKeywords(){
返回关键字;
}
公共void集合关键字(字符串关键字){
这个.关键词=关键词;
}
公共字符串getPreview(){
返回预览;
}
公共void集合预览(字符串预览){
this.preview=预览;
}
}
为什么它不能开箱即用?我的错在哪里


感谢您的帮助。

在导航到“预览”选项卡之前,您不会从“编辑”选项卡保存状态

通过单击“预览”链接,浏览器将向服务器发出新请求,Wicket将重新呈现整个页面,因此表单字段中输入的任何数据都将丢失

通过将AjaxFormComponentUpdateingBehavior添加到表单字段,可以轻松保存数据。例如,对于
标题
字段:

title = new TextField<String>("title", new PropertyModel<String>(articleEdit, "title"));
title.setRequired(true);
title.add(new AjaxFormComponentUpdatingBehavior("change") {
    @Override public void onUpdate(AjaxRequestTarget target) {}
    @Override public void onError(AjaxRequestTarget target) {
         target.add(feedbackPanel);
    }
});
title=newtextfield(“title”,新属性模型(articleEdit,“title”);
title.setRequired(true);
标题.添加(新的AjaxFormComponentUpdateingBehavior(“更改”){
@覆盖公共void onUpdate(AjaxRequestTarget目标){}
@覆盖公共void onError(AjaxRequestTarget目标){
添加(反馈面板);
}
});