Java 导叶弦模型

Java 导叶弦模型,java,model,wicket,Java,Model,Wicket,我仍然没有得到wicket的模型。我做错了什么?当links onClick方法打印filterString时,它仍然是“” class X extends Panel { String filterString; TextField filterTextField; AjaxLink filterLink; X(){ filterString = new String(""); filterTextField = new TextFi

我仍然没有得到wicket的模型。我做错了什么?当links onClick方法打印filterString时,它仍然是“”

class X extends Panel {
    String filterString;
    TextField filterTextField;
    AjaxLink filterLink;

   X(){
       filterString = new String("");
       filterTextField = new TextField<String>("filterTextField", new PropertyModel<String>(this, "filterString"));
       filterLink = new AjaxLink<Void>("filterLink"){
           private static final long serialVersionUID = 1L;
           @Override
           public void onClick(AjaxRequestTarget target) {              
               params.setFilterString(filterTextField.getModelObject());
               System.out.println("BLABLABLA " + filterTextField.getModelObject());
           }
       };
       //add stuff etc
    }
}
X类扩展面板{
字符串过滤器字符串;
文本字段过滤器文本字段;
AjaxLink过滤器链接;
X(){
filterString=新字符串(“”);
filterTextField=newtextfield(“filterTextField”,newpropertyModel(“filtertString”));
filterLink=新的AjaxLink(“filterLink”){
私有静态最终长serialVersionUID=1L;
@凌驾
public void onClick(AjaxRequestTarget目标){
setFilterString(filterTextField.getModelObject());
System.out.println(“blabla”+filterTextField.getModelObject());
}
};
//添加内容等
}
}
编辑:

好的,就像Juha说的,使用表单是有效的。有时我觉得创建表单感觉有些过分,但因为这可能是最容易出错的事情,所以我将在这里使用它。这个类看起来像这样:

public class X extends Panel {
    private static final long serialVersionUID = 1L;
    public X(String id) {
        super(id);
        add(new FilterForm("logEntryForm"));
    }

    public class FilterForm extends Form{
        private static final long serialVersionUID = 1L;
        private transient String text; //no need to serialize this
        public FilterForm(String id) {
            super(id);
            final TextField<String> contents = new TextField<String>("contents", new PropertyModel<String>(FilterForm.this, "text")); //textArea for user to enter the filter String
            add(contents);
            add(new AjaxButton("filterButton") {
                private static final long serialVersionUID = 1L;
                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    //do stuff, in my case it was to send the text to the database for filtering out results
                }
            }); 
        }
    }
}
公共类X扩展面板{
私有静态最终长serialVersionUID=1L;
公共X(字符串id){
超级(id);
添加(新的FilterForm(“logEntryForm”);
}
公共类FilterPerform扩展窗体{
私有静态最终长serialVersionUID=1L;
私有瞬态字符串文本;//无需序列化此字符串
公共过滤器性能(字符串id){
超级(id);
final TextField contents=new TextField(“contents”,new PropertyModel(filterperform.this,“text”);//供用户输入筛选字符串的文本区域
增加(内容);
添加(新的AjaxButton(“filterButton”){
私有静态最终长serialVersionUID=1L;
@凌驾
提交时受保护的void(AjaxRequestTarget目标,表单){
//做一些事情,在我的例子中是将文本发送到数据库以过滤出结果
}
}); 
}
}
}

在构造函数中,似乎您编写了
x()
而不是
x()
(大写x)

AjaxLink
替换为
Form
AjaxButton
或具有
onSubmit()
方法的东西。AjaxLink不提交,因此浏览器不会将输入值发送到服务器。

此处的类名及其构造函数并不重要,只是一个示例。问题是模型的使用。谢谢你提醒我打字错误。@fred,但在提问时要尽量提供语法正确的代码。因为它本身就是一个错误。所以onClick方法永远无法从用户那里获取值?对我来说似乎很奇怪,因为我明确地告诉它。你要么直接向文本字段询问它的值(而不是模型),然后处理它。或者你可以听朱哈的。将表单放入,然后使用提交组件。我应该使用哪种方法获取其值?getInput()或..?@fred问自己:当您在浏览器中单击链接时,链接如何知道它还必须将完全不相关的文本字段的值发送回服务器?仅仅因为在Java代码中添加了一些内容,HTML就不会改变。HTML表单正是为了这个目的:将一组输入字段组合成一个要一起提交的数据集。@biziclop当然,这只是因为有了AJAX,就不一定需要表单了。就我所知,添加表单与Wicket无关,但与Web的工作方式有关:浏览器不会向服务器提交任何值,除非它位于表单中,或者使用Ajax更新组件的值。这是网络,和它一起生活。