Java 导叶弦模型
我仍然没有得到wicket的模型。我做错了什么?当links onClick方法打印filterString时,它仍然是“”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
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更新组件的值。这是网络,和它一起生活。