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

2022-09-02 11:04:31

我正在使用play框架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的表单时,然后播放将请求数据绑定到模型对象,我们可以得到Form对象,就像

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

我们可以得到对象,因为请求对于带有ajax和没有ajax的post表单是相同的 在ajax的情况下,我正在做同样的事情,但是当我尝试从中获取实体成员时,它给了我一个没有价值的例外permissionFormData.get()

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

我在这里做错了什么?在使用ajax时,是否有任何其他方法可以从游戏中的表单中获取对象。我想要这里的对象而不是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,在我的控制器中,我确实从实体对象转换JSON,但我只想知道为什么AJAX请求的行为与普通表单提交不同,即为什么当两个请求属于同一类型时,我无法从请求中获取实体。Json.fromJson()

提前致谢。


答案 1

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

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

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

第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。

希望这有效!


答案 2

好吧,您正在寻找的另一种方法是您想要的对象而不是服务器端的Json -
您可以随时对其进行反序列化。像gsonfasterxml json这样的工具就在那里,你应该研究一些东西。这样,在创建要保留的实体时就无需额外工作。
呵呵。


推荐