如何在JSP中检索实体属性(从Servlet传递)

时间:2014-01-01 00:16:30

标签: java google-app-engine jsp servlets

我在Servlet(实体列表)中创建了一个列表。我试图遍历列表并获取JSP中的属性

我能够遍历JSP中的列表,但不知道如何检索实体的属性。我在这里缺少什么?

将数据插入数据存储区的Servlet,

DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Entity adminUser = new Entity("AdminUser");
adminUser.setProperty("mail_id", "mymailid@gmail.com");
ds.put(adminUser);

创建列表的Servlet

public void doGet(..) {
   ...
   PreparedQuery pq = ds.prepare(q);
   List<Entity> adminList = pq.asList(FetchOptions.Builder.withLimit(10));
   req.setAttribute("adminList", adminList);
   resp.setContentType("text/html");
   RequestDispatcher jsp = req.getRequestDispatcher("/WEB-INF/DisplayAdminPage.jsp");
   jsp.forward(req, resp);
   ...
}   

遍历列表的JSP

<c:forEach items="${adminList}" var="adminEntity">
    <tr>
    //This displays the entire entity, but not sure how to fetch
    //the individual property??
    <td>${fn:escapeXml(adminEntity)}</td>   
    </tr>       
</c:forEach>

我也尝试过这样的东西来获取属性; $ { fn:escapeXml(adminEntity.mail_id)},但无效

PS:我已遵循此post

中的建议

1 个答案:

答案 0 :(得分:2)

您无法直接访问该属性,因为EL Expression将尝试在Entity类中查找getXXX()方法,因为您已动态创建实体,因此该方法没有。

话虽如此,有一个解决方案可以解决您想要做的事情。如果查看Datastore类的PropertyContainer文档,您会发现它有一个名为getProperties()的公共方法,它返回Container的所有属性的java.util.Map<java.lang.String,java.lang.Object>。 / p>

这意味着您的实体将拥有一个名为properties的属性,您可以使用它来进一步引用您在Container上定义的属性。

因此,在您的代码中,您应该执行adminEntity.mail_id而不是adminEntity.properties.mail_id,而它应该有效。以类似的方式,您可以将替换mail_id替换为您可能定义的任何其他属性。