【发布时间】:2015-11-09 17:28:39
【问题描述】:
我正在使用 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提交表单时,将请求数据绑定到模型对象,我们可以像这样得到表单对象
Form<Permission> permissionFormData = Form.form(Permission.class).bindFromRequest();
我们可以通过permissionFormData.get() 获取对象,因为对于带有 ajax 和不带 ajax 的 post 表单的请求是相同的。在 ajax 的情况下,我正在做同样的事情,但是当我尝试从中获取实体成员时给了我一个无价值例外与
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 请求的行为与普通表单提交不同,即为什么我当两个请求属于同一类型时,我无法从请求中获取实体。
提前致谢。
【问题讨论】:
-
您是否看到所有使用 Ajax 发布的正确值?您可以使用 Web 开发人员工具检查这一点,例如在 Chrome 中...
-
@adis 是的,我检查了
per1变量,我可以看到它是从 chrome 检查元素中的请求传递过来的 -
来自开发工具中的“网络”面板?对于 Firefox,它是网络面板。如果您的 AJAX 和 html 提交之间存在差异,它将向您显示差异。你说你得到了 per1 变量值。还有其他区别吗?任何标题?您应该扩展发布到控制器的请求,然后比较两个请求。
标签: java jquery ajax forms playframework