我正在使用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的表单时,播放将请求数据绑定到Model对象,我们可以获取Form对象
Form<Permission> permissionFormData = Form.form(Permission.class).bindFromRequest();
我们可以通过permissionFormData.get()获取对象,因为对于具有ajax和没有ajax的post表单的请求是一样的.在ajax的情况下,我做同样的事情,但是当我尝试让Entity成员给我一个No价值异常
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.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 aGET
requestStep 3. Try using basic Jquery ajax to test run.
$("#form-permission").on('submit',function() { var $this = $(this); $.ajax({ url: '/url/to/controller',type: 'GET' }); return false; });
您可以随时从GET到POST,方便您,请确保您将JQuery和html表单方法更改为POST值,并将您的Playframework路由文件更改为POST.
希望这个工作!