2015-07-21 46 views
0

我有下一个情况。 要JSP我转发的对象类别和迭代的名单在它:java jsp返回对象的地址

<html> 
    <head> 
     <title>Test</title> 
    </head> 
    <body> 
     <c:forEach var="category" items="${categories}"> 
      <a href="/mytest/projects?category=${category}"><c:out value="${category.id} - ${category.name}"/></a><p> 
     </c:forEach> 
    </body> 

</html> 

至于链接到具体项目的结果列表显示。现在的问题是,JSP返回对象$ {}类的地址字符串,如:

[email protected] 

如何通过它的地址早在servlet的达到这个目标?我可以返回它的ID,并简单地通过新的类别(ID但我强烈认为有一种方法来访问已存在的对象。

在servlet的我试图让使用的是什么,我知道反对:

Category category = req.getParameter("category"); 

但是编译器返回错误串不能铸造类别(((

+0

这里有一些关键的误解。 HTML是文本,并在客户端呈现。 Servlet在服务器上。这个符号'data.Category @ 6892b54'是默认的'toString'输出。覆盖相应类中的'toString'方法,您将得到不同的输出结果。 '$ {xyz}'调用名为'xyz'的属性'toString'。 –

回答

2

${category}这样做是对的参考包括姓名category属性这个属性可能是请求,会话或应用程序范围如果你在你的JSP直接有这样的:

${category} 

它会调用toString在那里找到的对象的方法。由于您没有重写该方法,因此它使用Object#toString

为了避免这一切,您应该在查询字符串中传递实体的一些标识符作为参数。从你的代码,这应该这样做:

<a href="/mytest/projects?category=${category.id}"> 

而且在你前处理GET请求控制器,读取参数"category"并做适当的数据查找。

+0

但它只给我分类的id。现在创建一个对象 - 我只能做新的类别(并创建一些现有的类对象的双胞胎)。 – ovod

+0

这就是你必须做的:读取id,使用id在数据源中查找正确的数据并创建一个新的'Category'实例。这是如何工作的。这不像你可以通过网络传递类别对象,除非你序列化它,但这会影响数据。 –

+0

所以这意味着我不能玩对象地址?从客户端返回地址,而不是id,只需通过地址访问现有对象。为了不在浏览器中显示地址,我可以使用POST而不是GET – ovod