我需要在JSP数据存储区查询结果中显示。我获取数据并将它们转发到JSP文件中:
Query query = new Query("oAuth", key);
List<Entity> users = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(5));
try {
// Set the attribute and Forward to hello.jsp
req.setAttribute ("users", users); // to save your temporary calculations.
req.getRequestDispatcher("/sharemarkerusers.jsp").forward(req, resp);
} catch (Exception ex) {
ex.printStackTrace ();
}
以下是我的jsp文件的内容
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
<html>
<body>
<table>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.userEmail}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
但是我得到了结果:在com.google.appengine.api.datastore.Entity类中找不到属性userEmail
当我在单元格中显示用户变量时,它实际显示:
<html>
<body>
<table>
<tr>
<td><Entity [oAuth("******")/oAuth("*********")]:
accessToken = ***********
accessTokenSecret = ************
userEmail = usersemail@example.com
>
</td>
</tr>
</table>
</body>
</html>
所以问题是,我可以通过$ {user。?}标签访问实体的属性吗? forEach循环应该。
非常感谢。
答案 0 :(得分:5)
尝试使用$ {user.properties.userEmail}
答案 1 :(得分:2)
你做不到。 JSP EL用于访问JavaBean属性。这意味着${user.userEmail}
会在属性getUserEmail()
中查找getter user
。
您必须将实体转换为JavaBeans,或使用自定义标签访问实体属性。
此外,您不应该使用<c:out>
或fn:escapeXml
来显示可能包含HTML特殊字符的属性,和/或最终用户提交的属性。如果不这样做会使您的应用暴露于XSS攻击,并可能会生成损坏的HTML。
答案 2 :(得分:1)
如果其他人正在寻找直接解决方案(我没有改变实体,我的意思是),see this answer