AppEngine / Java:删除从复选框中检索的项目

时间:2014-07-21 20:04:08

标签: java jsp google-app-engine servlets google-cloud-datastore

这是我的问题: 我有一个带有以下代码的.jsp文件:

form class="form" action="deleteServlet" method="post">      
  <%
  DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
  Query query = new Query("Notice").addSort("date", Query.SortDirection.DESCENDING);
  PreparedQuery pq = datastore.prepare(query);
  for (Entity notice : pq.asIterable()) {
    String title = (String) notice.getProperty("title");
  %>
  <input type="checkbox" name="selected" 
         value=" <% KeyFactory.keyToString(notice.getKey()); %> " >     
  <%out.println(title);
  } %> 
  <input type="submit" value="Delete!">
</form>     

我在AppEngine数据存储上进行查询以获取项目列表。我需要使用一个复选框显示每个项目,用户可以选择其中一些并从数据存储中删除它们。 使用Servlet管理逻辑,这样:

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

     DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
     String[] noticesChecked = req.getParameterValues("selected");

     for (int i=0; i<noticesChecked.length; i++) {
         Key noticeKey = KeyFactory.stringToKey(noticesChecked[i]);
         datastore.delete(noticeKey);
     }

我使用getParameterValues获取所选项目的数组。然后,我迭代它们,我尝试从数据存储中删除它们。 由于我无法将密钥对象传递给servlet,因此我使用KeyFactory.keyToString和KeyFactory.stringToKey转换为String并传递它。

我的问题是noticesChecked中的元素都是空字符串“”。 我查了一下并注意到.getKey给了我正确的密钥。 keyToString和stringToKey似乎运作良好。检查数组大小告诉我,它不是null,但它与检查的项正确相关。但是,此数组中的所有元素都是“”。

有类似问题的人?对这个问题有什么看法吗?哪里出错了?

提前致谢。

1 个答案:

答案 0 :(得分:1)

尝试替换这部分jsp代码:

<% KeyFactory.keyToString(notice.getKey()); %>

这一个:

<%= KeyFactory.keyToString(notice.getKey()) %>

因为你想插入表达式的值。