2015-08-17 18 views
10

Tôi đang sử dụng khung chơi 2.3.8 java và sử dụng ajax để gửi biểu mẫu nhưng tôi không thể lấy đối tượng Biểu mẫu từ yêu cầu đó. phía dưới. Tôi có một mô hìnhGửi biểu mẫu qua ajax và nhận đối tượng biểu mẫu trong khung chơi java

@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 
} 

hình thức của tôi

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

Khi gửi mẫu mà không ajax sau đó chơi với phím tắt mà yêu cầu dữ liệu để mô hình đối tượng và chúng tôi có thể nhận được đối tượng Form như

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

và chúng tôi có thể lấy đối tượng theo số permissionFormData.get() vì yêu cầu giống nhau cho biểu mẫu bài đăng với ajax và withou t ajax Trong trường hợp của ajax tôi đang làm điều tương tự nhưng khi tôi cố gắng để có được các thành viên Entity từ nó đã cho tôi một Không Giá trị ngoại lệ với

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

Tôi đang làm gì sai ở đây? Và có bất kỳ các cách tiếp cận khác để nhận một đối tượng từ biểu mẫu trong khi sử dụng ajax.I muốn đối tượng ở đây thay vì JSON vì cuối cùng tôi đã tiếp tục tồn tại đối tượng với JSON, tôi phải lặp lại tất cả giá trị khóa của nó và tạo một đối tượng.

EDIT: khi tôi cố gắng đơn giản ajax nó đã cho tôi cùng một ngoại lệ

$("#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; 
}); 

Cách tiếp cận Tôi hiện đang sử dụng là đi qua một JSON từ yêu cầu ajax và trong điều khiển của tôi, tôi làm Json.fromJson() để chuyển đổi JSON từ đối tượng thực thể nhưng tôi chỉ muốn biết tại sao yêu cầu AJAX hoạt động khác với cách gửi biểu mẫu bình thường, nghĩa là tại sao tôi không thể nhận thực thể từ yêu cầu khi cả hai yêu cầu cùng loại.

Xin cảm ơn trước.

+0

Bạn có thấy tất cả các giá trị chính xác được POSTED với Ajax không? Bạn có thể kiểm tra điều này bằng các công cụ của Nhà phát triển web, như trong Chrome ... – adis

+0

@adis yes Tôi đã kiểm tra biến 'per1' và tôi có thể thấy nó được chuyển từ yêu cầu trong phần tử kiểm tra chrome – codegasmer

+0

Từ bảng điều khiển" Mạng "trong công cụ dev ? Đối với Firefox, đó là bảng điều khiển Net. Nó sẽ cho bạn thấy sự khác biệt, nếu có một sự lựa chọn giữa AJAX và html của bạn. Bạn nói bạn có giá trị biến per1. Bất kỳ sự khác biệt nào khác? Bất kỳ tiêu đề nào? Bạn nên mở rộng các yêu cầu được đăng lên bộ điều khiển của mình và sau đó so sánh cả hai yêu cầu. – Gyan

Trả lời

0

Bước 1: Đổi tên tất cả thuộc tính riêng thành công khai và xóa phương thức getter và setter. ví dụ:

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

Bước 2. Đảm bảo tập tin route của bạn là một GET yêu cầu

Bước 3. Cố gắng sử dụng jquery ajax cơ bản để kiểm tra chạy.

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

Bạn luôn có thể nên từ GET POST một cách thuận tiện, vui lòng đảm bảo bạn thay đổi JQuery và hình thức html phương pháp của bạn phải POST giá trị và cũng tuyến play framework bạn nộp để POST.

Hy vọng công trình này hoạt động!

+0

Tôi đang thử phương thức POST với mã của bạn như bạn đã đề xuất nhưng nó đã cho tôi cùng ngoại lệ không có giá trị – codegasmer

+0

Bất kỳ lý do cụ thể nào tại sao quyền truy cập được chỉ định phải được thay đổi từ riêng tư thành công khai và getters/setters bị xóa? – Gyan

+0

@Gyanapriya có hàng trăm cách để giải quyết vấn đề. –

0

Vâng, cách tiếp cận khác mà bạn đang tìm kiếm nơi bạn muốn đối tượng thay vì Json ở phía máy chủ -
Bạn luôn có thể hủy tuần tự hóa nó. Các công cụ như gsonfasterxml json có ở đó và một số thứ bạn nên xem xét.Bằng cách này, không có thêm nỗ lực trong việc tạo ra các thực thể bạn muốn tồn tại.
HTH.

+0

cũng là cách tiếp cận mà tôi hiện đang sử dụng là chuyển json từ yêu cầu ajax và trong trình điều khiển của tôi, tôi thực hiện 'json.fromJson()' để chuyển đổi json từ đối tượng thực thể nhưng tôi chỉ muốn biết tại sao yêu cầu AJAX hoạt động khác tức là tại sao tôi không thể có được một thực thể từ yêu cầu – codegasmer

Các vấn đề liên quan