通过ajax发布表单并在play框架java中获取表单对象

时间:2015-08-17 06:47:04

标签: java jquery ajax forms playframework

我正在使用play framework 2.3.8 java并使用ajax提交表单,但我无法从该请求中获取Form对象。我的问题解释如下。 我有一个模型

<form id="form-permission">
    <!--Setting "on" and "of" value from js-->
    <input type="checkbox" id="per1" name="per1">
    <input type="checkbox" id="per2" name="per2">
    <input type="submit" >
</form>

$('#form-permission').on('submit',function(){
    var uid=// id to update

    myJsRoutes.controllers.MyController.updatePer(uid).ajax({

    data : $("#form-permission").serialize(),
        success : function(data) {
            console.log(data);
    });
    return false;
});

我的表格

Form<Permission> permissionFormData = Form.form(Permission.class).bindFromRequest();

在提交表单没有ajax 时,播放将请求数据绑定到模型对象,我们可以获得Form对象,如

permissionFormData.get()

我们可以通过Logger.info("---Permission one is "+permissionFormData.get().getPer1()); 获取对象,因为对于带有ajax和没有ajax的帖子表单的请求是相同的在ajax的情况下我做同样的事情但是当我尝试从它获取实体成员时使用

无价值例外
$("#form-permission").on('submit', function() {
    var $this = $(this);
    var uid=//some uid
    $.ajax({
        url: '/account/permission?id='+uid,
        data: $this.serialize(),
        type: 'POST'
    });
    return false;
});

我在这里做错了什么?还有其他方法可以在使用ajax时从表单中获取对象。我想在这里使用对象而不是JSON,因为最后我用JSON持久保存了对象我有迭代其所有键值并创建一个对象。

编辑:当我尝试简单的ajax时,它给了我同样的异常

Json.fromJson()

我目前使用的方法是从ajax请求传递JSON,在我的控制器中我做SELECT maxdate, t.name, t.address from table1 t inner join ( SELECT MAX(date) as maxdate, name FROM table1 GROUP BY name ) d on(t.date = d.maxdate and t.name = d.name) 从实体对象转换JSON但我只是想知道为什么AJAX请求的行为与正常表单提交不同,即当两个请求属于同一类型时,为什么我无法从请求中获取实体。

提前致谢。

2 个答案:

答案 0 :(得分:0)

  

步骤1:将所有私有属性重命名为public并删除getter和setter方法。   例如

private String per1= "off"; to public String per1= "off";
  

步骤2.确保您的route文件是GET请求

     

步骤3.尝试使用基本的Jquery ajax来测试运行。

$("#form-permission").on('submit', function() {
   var $this = $(this);
   $.ajax({
     url: '/url/to/controller',
     data: $this.serialize(),
     type: 'GET'
   });
   return false;
});

您可以随时从GET到POST,请确保将您的JQuery和html表单方法更改为POST值,并将Playframework路由文件更改为POST。

希望这有效!

答案 1 :(得分:0)

那么,你正在寻找的另一种方法是你想要的对象而不是服务器端的Json -
您始终可以对其进行反序列化。 像gsonfasterxml json这样的工具就在那里,你应该研究一下。这样就不需要额外的努力来创建你想要坚持的实体 HTH。