【问题标题】:How to retrieve Entity property in JSP(Passed from Servlet)如何在 JSP 中检索实体属性(从 Servlet 传递)
【发布时间】:2014-01-01 00:16:29
【问题描述】:

我在 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 中给出的建议进行操作

【问题讨论】:

  • 那是哪个属性?
  • 嗨@Sotirios,抱歉我打错了(现在已经更正了帖子)。该属性是“mail_id”。我试图获取这样的属性; ${fn:escapeXml(adminEntity.mail_id)}。像这样将此属性“mail_id”添加到数据存储区; adminUser.setProperty("mail_id", "mymailid@gmail.com") - 其中 'adminUser' 是实体类型

标签: java google-app-engine jsp servlets


【解决方案1】:

您不能像那样直接访问该属性,因为 EL 表达式将尝试在 Entity 类上查找 getXXX() 方法,因为您已经动态创建了 Entity,所以它没有该方法。

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

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

因此,在您的代码中,您应该使用adminEntity.properties.mail_id 而不是adminEntity.mail_id,它应该可以工作。以类似的方式,您可以用您可能定义的任何其他属性替换替代 mail_id。

【讨论】:

  • 非常感谢您的回答。也许您知道这种检索属性的方式是好还是坏?
猜你喜欢
  • 1970-01-01
  • 2013-09-04
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 2014-02-25
  • 1970-01-01
  • 2020-06-14
相关资源
最近更新 更多