Bonjour,
Bon comme d'habitude, j'essaie de faire comme le dit la doc ou les articles et ça ne marche pas...
Lorsque pour créer mon ItemFileReadStore afin d'afficher des données dans un DataGrid, j'ai recours à une Servlet, j'ai le message d''erreur "Sorry, an error occured"
Voici des extrait du code :
La jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
...
<script type="text/javascript" src="<%=request.getContextPath()%>/js/dojo-release-1.3.1/dojo/dojo.js"
      djConfig="isDebug:false, parseOnLoad: true"></script>
<script type="text/javascript">
    dojo.require("dijit.form.CheckBox");
    dojo.require("dojox.grid.DataGrid");
    dojo.require("dojox.widget.PlaceholderMenuItem");
    dojo.require("dojo.data.ItemFileReadStore");
    dojo.require("dojo.parser");
 
  var theadLayout = [
    {field : "selector", name: "", width:"20px", type: dojox.grid.cells.Bool, editable: true},
    {field : "id", name: "id", hidden: true},
    {field : "identifier", name: "Identifiant", width:"200px", formatter: formatLink},
    {field : "firstname", name: "Prenom"},
    {field : "lastname", name: "Nom"}
  ];
 
var jsonStore = new dojo.data.ItemFileReadStore({url: "<%=request.getContextPath()%>/userlistjson"});
  function initGrid(){
    //var items  = jsonStore.fetch();
    var grid = new dojox.grid.DataGrid({
        query: { identifier: '*' },
        store: jsonStore,
        structure: theadLayout,
        headerMenu: gridMenu,
        rowSelector: '20px',
        rowsPerPage: '20',
        noDataMessage: "TODO pas de données",
        region: 'center'
      },'myDataGrid');
    container.addChild(grid);
    grid.startup();
  }
  dojo.addOnLoad(initGrid);
</script>
...
Lorsque j'utilise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
var jsonStore = new dojo.data.ItemFileReadStore({data: data});
où data est écrit "en dur" c'est à dire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
var data= {identifier:...};
dans la jsp, ça fonctionne, les données s'affichent correctement dans la table. Mais par une Servlet, (des traces prouvent que je passe dans la servlet), nada!
La servlet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
public class UserGetListAsJson extends HttpServlet {
...
public void doGet(HttpServletRequest pReq, HttpServletResponse pResp)
    throws IOException, ServletException 
    {
        ...//recuperatrion de ma liste de users dans une BD
        JSONObject json = new JSONObject();
        try 
        {
            json.put("identifier", "identifier");
            json.put("label", "identifier");
            JSONArray jsonArray = new JSONArray();
            for (int i=0; i<users.size();i++) {
                JSONObject userAsJson = new JSONObject();
                userAsJson.put("id", users.get(i).getId());
                userAsJson.put("identifier", users.get(i).getLogin());
                userAsJson.put("firstname", users.get(i).getFirstname());
                userAsJson.put("lastname", users.get(i).getLastname());
                jsonArray.add(userAsJson);
            }
            json.put("items", jsonArray);
        } catch (Exception ex){
            ex.printStackTrace();
        }
        pResp.setContentType("text/x-json");
        PrintWriter out = pResp.getWriter();
        out.print(json.toString());
        //out.flush();
    }
...
}
Quand je met une trace pour voir le contenu de json.toString(), ça semble ok : le json est bien formé.