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

标签 java jquery ajax forms playframework

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

@Entity
public class Permission {
    @Id
    @Column(name = "id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String per1= "off";

    private String per2= "off";

    // getter setters
}

我的表格

<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;
});

当提交表单时没有ajax 然后 Play 将该请求数据绑定(bind)到模型对象,我们可以获得表单对象,如

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

我们可以通过 permissionFormData.get() 获取对象,因为使用 ajax 和不使用 ajax 的帖子表单的请求是相同的 在使用 ajax 的情况下,我正在做同样的事情,但是当我尝试从中获取实体成员给了我一个无值(value)异常

Logger.info("---Permission one is "+permissionFormData.get().getPer1());

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

编辑:当我尝试简单的 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,在我的 Controller 中我执行 Json.fromJson() 从实体对象转换 JSON 但我只想知道为什么 AJAX 请求是与普通表单提交的行为不同,即为什么当两个请求的类型相同时我无法从请求中获取实体。

提前致谢。

最佳答案

Step 1: Rename all private properties to public and remove getter and setter methods. e.g.

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

Step 2. Ensure your route file is a GET request

Step 3. Try using basic Jquery ajax to test run.

$("#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。

希望这能奏效!

关于java - 通过ajax发布表单并在play framework java中获取表单对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32044257/

相关文章:

java - 对闰年排序不起作用

javascript - 通过jQuery快速获取元素

javascript - 如何使用ajax将javascript变量中的值放入php变量中

php - 在 ajax 输出上显示未定义值的选项列表

java - 打印 ParseObject 内容

java - Postgres 和 GWT 的主要提供商

javascript - jquery .one() 触发查询一次,但是如果 .one() 内部出现问题,我如何才能触发查询一次?

javascript - 通过ajax调用Google Maps Api不起作用

jquery - 验证检查带有单独提交按钮的动态文本框

java - 如何向数据库添加字段并连接到代码