Qual è il modo più semplice per serializzare un bean su una stringa utilizzando GWT? Preferisco non utilizzare le chiamate GWT.create().Serialize Object in GWT
risposta
Disclaimer: La serializzazione di un bean nell'URL non è una grande idea per GWT. Ho imparato che se è necessario inserire dati nell'URL, dovrebbe essere il meno possibile e solo ciò che è necessario per ripristinare lo stato della pagina. Guarda come Gmail utilizza i token della cronologia e vedrai che è piuttosto minimale.
Con quella dichiarazione di non responsabilità fuori strada:
Per un progetto GWT ho lavorato ho semplicemente scritto fuori i valori del chicco separati da un delimitatore. Durante la lettura dei valori, ho usato il metodo String.split() per ottenere un array. Con questo array, restituisco i valori alle proprietà del bean corrette. Nel codice:
public class Sample {
private int a;
private boolean b;
private String c;
//getters and setters for fields not shown
public String toHistoryToken(){
return a+"/"+b+"/"+c;
}
public void fromHistoryToken(String token){
String[] values=token.split("/");
a=Integer.parseInt(values[0]);
b=Boolean.parseBoolean(values[1]);
c=values[2];
}
}
Per scenari più complicati potrebbe essere necessario fare cose più complicate. Ad esempio, per gli oggetti nidificati, è necessario scrivere il codice per passare i valori agli oggetti figlio.
Inoltre, tenere presente che è necessario assicurarsi che tutti i valori utilizzati non contengano il delimitatore. Quindi, se sai che le tue stringhe potrebbero contenere "/", potresti dover eseguire un'operazione replace() per sfuggire a qualsiasi delimitatore nidificato.
Forse questo è quello che stai cercando?
Json <-> Java serialization that works with GWT
Extended Version:
Utilizzando la libreria JSON-lib:
http://json-lib.sourceforge.net/
Si può fare questo (andando a destra dal chicco alla stringa JSON):
http://json-lib.sourceforge.net/snippets.html#Creating_a_JSONObject_from_a_JavaBean
Qualcosa del genere, ma non voglio scrivere i tipi di sovrapposizione per tutte le mie classi (40+). Mi piacerebbe un modo semplice e non intrusivo per serializzare un oggetto su una stringa. –
Non intrusivo è relativo, perché considero i tipi di sovrapposizione per tutti i dati che sto per passare, MA se vuoi un modo per passare direttamente da un oggetto Bean a un oggetto stringa JSON, controlla il mio aggiornamento. – Organiccat
Sono sicuro che il json-lib non funzionerà in GWT (lato client), perché probabilmente usa il reflection tramite BeanInfo. Non posso controllare le fonti adesso. –
Non sono sicuro di capire cosa stai cercando di realizzare.
Se si desidera solo inviare stringhe avanti e indietro, non è necessario eseguire lo nulla - lo si ottiene gratuitamente utilizzando il normale meccanismo GWT RPC. Basta creare un metodo che restituisca un java.lang.String
, creare l'implementazione accompagnatoria e l'interfaccia Async, e il gioco è fatto.
Se invece si desidera inviare un bean, accertarsi che abbia un costruttore di zero-arg e implementa Serializable
o IsSerializable
.
Voglio sputare un bean in una barra degli URL, nel modo più semplice possibile. –
Come ha detto sopra Miguel, non c'è alcuna riflessione in GWT. Forse starai meglio scrivendo un metodo personalizzato "toUrl()". –
Ci possono essere alcune sfumature di GWT che complicano le cose, ma in generale le cose come:
- dati XML binding/librerie di mappatura come JAXB e XStream possono fare questo
- Con JSON, librerie come Jackson può fare binding flessibile del bean completo, simile a JAXB, ma con ancora meno configurazione (e velocità più veloce se questo è importante).
dovrebbe funzionare.
Questo non lo taglierà poiché queste librerie probabilmente usano il reflection, che non è disponibile sul lato client GWT. –
In definitiva GWT è in esecuzione in JavaScript (anche se è scritto in Java). In questo senso, i "java bean" non sono cose che si trovano facilmente nel client, ma funzionano bene nel server (in Java).
Se si accetta che un bean è in realtà solo un oggetto senza metodo, l'intento di base per il loro utilizzo è lo spostamento dei dati. Nativamente in JavaScript, JSON funge anche da contenitore estremamente flessibile per i dati. Sul lato server una serie di bean può essere convertita in JSON usando BeanUtils (e un po 'di attraversamento). JSON può essere serializzato in GWT come stringa e GWT ha un parser per convertire JSON in oggetti JavaScript per il client.
Probabilmente non è il modo più semplice per farlo, ma è molto flessibile una volta che funziona.
Il più vicino che ho trovato è stato questo:
Faster GWT startup with objects embedded in the HTML host page
- 1. Serialize javascript object to json and back
- 2. JSON.net Serialize C# object to JSON Edizione
- 3. Serialize/Deserialize Map <String, Object> con Jackson
- 4. json.net; serialize entity framework object (errore di riferimento circolare)
- 5. Serialize List <object> (dove sono supportati gli oggetti primitivi) in Protobuf.NET?
- 6. Perché Object()! = Object() in JavaScript?
- 7. django serialize queryset.values () in json
- 8. Serialize o json in PHP?
- 9. Serialize Query-Parameter in Retrofit
- 10. serialize() e $ _SESSION
- 11. Serialize/deserialize System.RuntimeType
- 12. Serialize o Hash a chiusura in PHP
- 13. Serialize DateTime as binary
- 14. serialize date attributes
- 15. JSONKIt serialize NSDIctionary
- 16. jQuery serialize e unserialize
- 17. PHP - Serialize floating points
- 18. Serialize/Deserialize array bidimensionale
- 19. PHP serialize() - specifica
- 20. Jquery sortable ('serialize')
- 21. Differenza tra gwt, gwt-rpc, ext-gwt, smart gwt
- 22. Serialize array with strong_parameters
- 23. Cellula composita in un'applicazione gwt
- 24. Serialize enum int
- 25. Serialize Stato HotSpot
- 26. Serialize o Implode
- 27. jQuery serialize() lascia textarea
- 28. jQuery serialize non funziona
- 29. Serialize XML con la stringa XML
- 30. Serialize proprietà come XML attributo in elemento
Che tipo di stringa stai parlando? Un elenco di coppie "proprietà = valore"? –
Qualsiasi tipo di stringa, purché possa essere convertita avanti e indietro nell'istanza originale. –