如何在jsp中显示实体属性

时间:2011-08-06 10:10:09

标签: java google-app-engine jsp jsp-tags

我需要在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循环应该。

非常感谢。

3 个答案:

答案 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