2015-08-17 13 views
10

Sto utilizzando play framework 2.3.8 java e utilizzo di ajax per inviare un modulo ma non riesco a ottenere l'oggetto Form da quella richiesta.Il mio problema è spiegato sotto. Ho un modelloInvia modulo tramite ajax e ottieni un oggetto modulo in play framework 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 
} 

mia forma

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

Al momento della presentazione forma senza ajax poi giocare lega che richiedono i dati per modellare oggetti e possiamo ottenere oggetto Form come

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

e possiamo ottenere l'oggetto tramite permissionFormData.get() poiché la richiesta è uguale per il modulo di posta con ajax e senza t ajax Nel caso di ajax che sto facendo la stessa cosa, ma quando provo ad ottenere i membri di entità da me ha dato un'eccezione Nessun valore con

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

Che cosa sto facendo male qui? E v'è alcuna altri approcci per ottenere un oggetto dalla forma in gioco mentre si usa ajax. Voglio l'oggetto qui invece di JSON perché alla fine ho persistito l'oggetto con JSON, devo iterare tutto il suo valore chiave e creare un oggetto.

EDIT: quando provo semplicemente Ajax mi ha dato la stessa eccezione

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

L'approccio Attualmente sto usando sta passando un JSON dalla richiesta AJAX e nel mio controller faccio Json.fromJson() convertire JSON da entità oggetto ma voglio solo sapere perché la richiesta AJAX si sta comportando in modo diverso rispetto al normale invio del modulo, cioè perché non sono in grado di ottenere un'entità dalla richiesta quando entrambe le richieste sono dello stesso tipo.

Grazie in anticipo.

+0

Vedi che tutti i valori corretti sono POSTATI con Ajax? Puoi verificarlo con gli strumenti per gli sviluppatori Web, come in Chrome ... – adis

+0

@adis sì Ho controllato la variabile 'per1' e posso vederlo passare dalla richiesta in chrome inspect element – codegasmer

+0

Dal pannello" Rete "negli strumenti dev ? Per Firefox è il pannello Rete. Ti mostrerà la differenza, se ce n'è una tra i tuoi invii AJAX e html. Tu dici di aver ottenuto il valore variabile per1. Qualche altra differenza? Qualsiasi intestazione? Si dovrebbero espandere le richieste pubblicate sul controller e quindi confrontare entrambe le richieste. – Gyan

risposta

0

Passaggio 1: Rinominare tutte le proprietà private in pubblico e rimuovere i metodi getter e setter. ad es.

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

Fase 2. Verificare il file route è un GET richiesta

Fase 3. Provare a utilizzare di base Jquery ajax per testare corsa.

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

Puoi sempre dovrebbe da GET POST a vostro piacimento, gentilmente assicurarsi di cambiare il metodo di JQuery e la forma di HTML per pubblicare il valore e anche il file tuoi percorsi play framework per POST.

Spero che questo funzioni!

+0

Sto provando il metodo POST con il tuo codice come suggerito ma mi ha dato la stessa eccezione per nessun valore – codegasmer

+0

Qualche ragione particolare per cui l'accesso specificato dovrebbe essere cambiato da privato a pubblico e getter/setter rimossi? – Gyan

+0

@Gyanapriya ci sono centinaia di modi per risolvere un problema. –

0

Bene, l'altro approccio che si sta cercando dove si desidera l'oggetto anziché Json sul lato server -
È sempre possibile deserializzare. Strumenti come gson e fasterxml json sono lì e qualcosa che dovresti esaminare.In questo modo non ci sono sforzi extra nella creazione delle entità che si desidera mantenere.
HTH.

+0

beh l'approccio che sto usando attualmente sta passando un json da una richiesta ajax e nel mio controller faccio 'Json.fromJson()' per convertire json dall'entità object ma voglio solo sapere perché la richiesta AJAX si sta comportando diversamente dal normale cioè perché non sono in grado di ottenere un'entità dalla richiesta – codegasmer