【问题标题】:AppEngine/Java: delete items retrieved from checkboxesAppEngine/Java:删除从复选框检索到的项目
【发布时间】:2014-07-21 20:04:07
【问题描述】:

这是我的问题: 我有一个带有以下代码的 .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 获得了一组选定项目。然后,我对它们进行迭代并尝试从数据存储中删除它们。 由于我无法将 Key 对象传递给 servlet,因此我使用 KeyFactory.keyToString 和 KeyFactory.stringToKey 转换为 String 并传递它。

我的问题是noticesChecked中的元素都是空字符串“”。 我检查并 notice.getKey 给了我正确的密钥。 keyToString 和 stringToKey 似乎也运作良好。对数组大小的检查告诉我这不是空的,但它与检查的项目正确相关。然而,这个数组中的所有元素都是“”。

有类似问题的人吗?关于这个问题的任何想法?错误在哪里?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    尝试替换这部分jsp代码:

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

    这个:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2010-09-27
      • 1970-01-01
      • 2017-07-21
      • 2018-04-15
      相关资源
      最近更新 更多