0

私はこの問題を抱えています:私のSQLデータベースには、INT型で自動インクリメンタルな主キーIDUtenteを持つテーブルUtenteがあります。私が持っているデータベースで:

ID|Name|....
1|Name1|....
2|Name2|....

Java サーブレットでは、データベースからデータを読み取り、次の方法で Gson を使用してデータをシリアル化します。

Gson gson = new Gson(); 
String lista = gson.toJson(utenti);
request.setAttribute("lista", lista);
request.getRequestDispatcher("GestioneUtenti.jsp").forward(request, response);

ここでは、文字列 lista が等しいため、問題ありません。

[{"idUtente":1,"username":"a","password":"a","nome":"a","cognome":"a","dataNascita":"dic 12, 1988","telefono":"3200769667","indirizzo":"a","citta":"a","luogoDiNascita":"a","abbonamentiATempo":0,"abbonamentiAPunti":0,"dataIscrizione":"dic 12, 2000","posizione":"socio","email":"a"},{"idUtente":2,"username":"b","password":"b","nome":"b","cognome":"b","dataNascita":"giu 25, 1960","telefono":"3474213142","indirizzo":"b","citta":"b","luogoDiNascita":"b","abbonamentiATempo":0,"abbonamentiAPunti":0,"dataIscrizione":"mar 11, 2001","posizione":"non socio","email":"b"}]

私の JSP ページでは、文字列を逆シリアル化する必要があり、次のようにします。

<%String lista = (String)request.getAttribute("lista");
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();                         
Type listType = new TypeToken<ArrayList<Utente>>() {}.getType();
ArrayList<Utente> users = gson.fromJson(lista, listType);
for(int i=0;i<users.size();i++){
out.print("<tr>");
out.print("<td>"+users.get(i).getIdUtente()+"</td>");
out.print("<td>"+users.get(i).getNome()+"</td>");
out.print("<td>"+users.get(i).getCognome()+"</td>");
    out.print("<td>"+users.get(i).getPosizione()+"</td>");
    out.print("<td>"+users.get(i).getTelefono()+"</td>");
 }

問題は、出力される ID が常に 0 に等しいことです! なんで?必要ならクラスのウテンテも書きます!

4

1 に答える 1

0

utenti を JSON にシリアライズし、それをリクエストに入れ、JSP でデシリアライズするのはなぜですか?

リストをリクエストに入れ、リストを文字列として抽出するだけです。GSON は必要ありません。

これをネットワーク経由でクライアントに送信していた場合、GSON の必要性はわかりますが、特定の使用例ではそうではありません。

操作全体がサーバー内で行われているため、utenti リスト インスタンスをシリアル化する必要はありません。

于 2013-02-03T16:55:42.537 に答える