Extjs4 服务器播放框架和extjs未收到POST值

Extjs4 服务器播放框架和extjs未收到POST值,extjs4,playframework-2.0,Extjs4,Playframework 2.0,我正在用PlayFramework2和extjs4构建一个Web服务。直到今天,我都设法克服了任何障碍。但这是我无法单独处理的事情。我跟着,但这对我没有帮助。嗯,一开始是这样的。我知道它是有效的,我能够向数据库(mongodb)添加一些值。我怀疑这是否重要,但: 一切正常,我在数据库中添加了一些测试数据 我用Java编写了一些其他方法 我在mongo集合中使用了db.Category.remove() 服务器现在无法从窗体接收任何值 我有一个带有两个字段的Ext.FormPanel: ite

我正在用PlayFramework2和extjs4构建一个Web服务。直到今天,我都设法克服了任何障碍。但这是我无法单独处理的事情。我跟着,但这对我没有帮助。嗯,一开始是这样的。我知道它是有效的,我能够向数据库(mongodb)添加一些值。我怀疑这是否重要,但:

  • 一切正常,我在数据库中添加了一些测试数据
  • 我用Java编写了一些其他方法
  • 我在mongo集合中使用了
    db.Category.remove()
  • 服务器现在无法从窗体接收任何值
我有一个带有两个字段的
Ext.FormPanel

items: [
    { 
        id: 'categoryName',
        fieldLabel: 'Category name', 
        name: 'categoryName', 
        allowBlank: false 
    },{
        xtype: 'textarea',
        id: 'categoryDescription',
        fieldLabel: 'Description',
        name: 'categoryDescription',
        allowBlank: true
    }
]
相应的
模型
类如下所示:

@MongoCollection(name = "Category")
public class CategoryModel{
    private String categoryName;
    private String categoryDescription;

    @JsonProperty("categoryName")
    public String getName() {
        return categoryName;
    }

    @JsonProperty("categoryName")
    public void setName(String name) {
        this.categoryName = name;
    }

    @JsonProperty("categoryDescription")
    public String getDescription() {
        return categoryDescription;
    }

    @JsonProperty("categoryDescription")
    public void setDescription(String description) {
        this.categoryDescription = description;
    }

    public String toString(){
        ObjectMapper mapper = new ObjectMapper();
        String json = null;
        try {
            json = mapper.writeValueAsString(this);
        } catch (JsonGenerationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return json;
    }
}
最后,这里是我想要接收值的地方:

Form<CategoryModel> categoryForm = form(CategoryModel.class);
System.out.println(categoryForm);
我在服务器端为这个特定请求定义了conf/routes中的
POST
请求类型

我有两个问题:

  • 如何修复它
  • 更重要的是,为什么会发生这种情况
编辑 正如@adis建议的那样:

Form<CategoryModel> categoryForm = form(CategoryModel.class).bindFromRequest();
System.out.println(categoryForm);
System.out.println(categoryForm.data());
我也查过了

CategoryModel categoryModel = form(CategoryModel.class).bindFromRequest().get();
System.out.println(categoryModel);
它输出:
{“categoryName”:null,“categoryDescription”:null}


任何人都可以解释这一点?

如评论所述,您必须通过以下方式将请求绑定到模型:

 Form<CategoryModel> categoryForm = form(CategoryModel.class).bindFromRequest();
这将为您提供一个模型实例,其中填充了来自post REQUEST的数据。此方法通常如下所示:

Form<Task> taskForm = form(Task.class).bindFromRequest();

if (taskForm.hasErrors()) {  // check for constraints
    Logger.info("Error:" + taskForm);
    return badRequest(views.html.task.create.render(taskForm));
}
// here get the model instance
Task newTask = taskForm.get();
formtaskform=Form(Task.class).bindFromRequest();
如果(taskForm.hasErrors()){//检查约束
Logger.info(“错误:+taskForm”);
返回badRequest(views.html.task.create.render(taskForm));
}
//这里获取模型实例
Task newTask=taskForm.get();

希望这能有所帮助。

如前所述,您必须通过以下方式将请求绑定到模型:

 Form<CategoryModel> categoryForm = form(CategoryModel.class).bindFromRequest();
这将为您提供一个模型实例,其中填充了来自post REQUEST的数据。此方法通常如下所示:

Form<Task> taskForm = form(Task.class).bindFromRequest();

if (taskForm.hasErrors()) {  // check for constraints
    Logger.info("Error:" + taskForm);
    return badRequest(views.html.task.create.render(taskForm));
}
// here get the model instance
Task newTask = taskForm.get();
formtaskform=Form(Task.class).bindFromRequest();
如果(taskForm.hasErrors()){//检查约束
Logger.info(“错误:+taskForm”);
返回badRequest(views.html.task.create.render(taskForm));
}
//这里获取模型实例
Task newTask=taskForm.get();

希望这有帮助。

只是一个猜测,但是您不应该注释属性而不是getter吗

@JsonProperty("description")
public void setDescription(String description) {
    this.categoryDescription = description;
}
应该是

@JsonProperty("description")
private String description;

您的上述代码中也存在差异。。描述的getter绑定到“categoryDescription”,而setter绑定到“description”

只是一个猜测,但是您不应该注释属性而不是getter吗

@JsonProperty("description")
public void setDescription(String description) {
    this.categoryDescription = description;
}
应该是

@JsonProperty("description")
private String description;

您的上述代码中也存在差异。。description的getter绑定到“categoryDescription”,setter绑定到“description”

您能试试吗:Form categoryForm=Form(CategoryModel.class).bindFromRequest()@adis多亏了你的评论,我可以看到进展:D我用一个小更新编辑了我的问题。难道你的toString()方法错了吗?打印对象时,java总是调用toString()方法,对吗?你能删除你的toString()方法而不是打印,用eclipse调试它吗?你能试试吗:Form categoryForm=Form(CategoryModel.class).bindFromRequest()@adis多亏了你的评论,我可以看到进展:D我用一个小更新编辑了我的问题。难道你的toString()方法错了吗?打印对象时,java总是调用toString()方法,对吗?你能删除你的toString()方法而不是打印,用eclipse调试它吗?关于
@Required
:。几天后我会尝试一下你的解决方案,谢谢你的帮助!只有在没有验证错误的情况下,才会绑定这些值。因此,如果电子邮件是空的,您将得到一个验证错误,因此您将无法使用
get()
方法。这不是一个bug,只是它的工作方式。谢谢你的帮助,但这并不能解决我的问题-效果是一样的。我不确定发生了什么,但问题已经解决了,谢谢你的帮助!关于
@必填项
:。几天后我会尝试一下你的解决方案,谢谢你的帮助!只有在没有验证错误的情况下,才会绑定这些值。因此,如果电子邮件是空的,您将得到一个验证错误,因此您将无法使用
get()
方法。这不是一个bug,只是它的工作方式。谢谢你的帮助,但这并不能解决我的问题-效果是一样的。我不确定发生了什么,但问题已经解决了,谢谢你的帮助!感谢您的回答,注释属性而不是setter/getter并没有解决我的问题<代码>说明注释是一个错误,我在代码前面看到了它,感谢您的注意-它仍然不是我问题的根源。感谢您的回答,注释属性而不是setter/getter并没有解决我的问题<代码>说明注释是一个错误,我在代码前面看到了它,感谢您的注意-它仍然不是我问题的根源。