【发布时间】: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