2012-03-12 42 views
0

我有一个从地图< String,Double>map创建的JSP,它可能在不同的请求上有不同的值。获取帖子表单数据的JSP/Servlet

的JSP显示:

key --> Mutable input field with value for that key 

通过在地图中的元素进行迭代。在表单底部,我有一个提交按钮,它调用(POST)一个更新地图中所有值的servlet。

我怎么会得到变量列表的参数,因为我不知道他们的名字,从发布请求?

现在我想这样做以下的(伪代码,而忽略格式化例外):

Map params = request.getParameterMap(); 
    Set<Entry<String, Double>> set = params.entrySet(); 
    Iterator<Entry<String, Double>> it = set.iterator(); 

    while (it.hasNext()) { 
     Entry<String, Double> e = it.next(); 
     if (map.containsKey(e.getKey())); 
      map.put(e.getKey(), e.getValue()); 
    } 

是否有更快,更好的方式,从在servlet jsp中获取动态数据?

回答

1

我不知道它是更快还是更好,但是您可以将映射转换为JSON,然后将该字符串作为单个参数传回给您的servlet,而不必检索参数映射。然后在你的servlet中,你可以将参数字符串加载到JSON数组或其他东西中,然后遍历它。

我认为这是一个更好的方法的原因是因为您可以将更多的参数传递给您的servlet,而不必在while循环中添加条件来将它们计入Entry集。

//Create array 
    Map map = new LinkedHashMap(); 
    JSONArray jArray = new JSONArray(); 

    map.put("id", "asdf"); 
    map.put("name", "bbbdasfadsbb"); 
    map.put("address", "sadfasdfasdf"); 
    map.put("phone", "asdfdsafsdf"); 
    map.put("details", "asdasdf"); 
    map.put("randomText", "sdafasdfs"); 

    jArray.put(map); 

    //You can write this string out to a hidden field 
    //called mapAsJSONArray 
    String mapAsJSONArray = jArray.toJSONString(); 

    //....... 
    //Then in your servlet.... 
    String mapAsJSONArray = request.getParameter("mapAsJSONArray"); 
    JSONArray jsonArray = new JSONArray(mapAsJSONArray); 

    for (int i = 0; i < jsonArray.length(); ++i) { 
     JSONObject obj = jsonArray.getJSONObject(i); 
     String id = obj.getString("id"); 
     // ... 
    } 
+0

我猜ajax允许你写json作为post参数。 – 2012-03-13 03:37:38

+0

我不明白为什么它不会。你是通过AJAX还是普通的HTTP进行POST?无论哪种方式,它应该工作。 – bsimic 2012-03-13 03:39:38

+0

定期HTTP。它应该工作,一旦我测试,我会回复你,直到那时,回答。 – 2012-03-13 03:52:34