这是我的问题: 我有一个带有以下代码的.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,但它与检查的项正确相关。但是,此数组中的所有元素都是“”。
有类似问题的人?对这个问题有什么看法吗?哪里出错了?
提前致谢。
答案 0 :(得分:1)
尝试替换这部分jsp代码:
<% KeyFactory.keyToString(notice.getKey()); %>
这一个:
<%= KeyFactory.keyToString(notice.getKey()) %>
因为你想插入表达式的值。