Доступ к z-значению координат для Spring NVC с помощью Hibernate Spatial

У меня есть приложение Spring MVC, которое я создаю, используя базу данных Oracle Spatial, содержащую трехмерные геометрии. Я использую Hibernate Spatial для доступа к нему, но, поскольку я новичок в Spring (и относительно новичок в Java), мне трудно получить доступ к координате z для моего представления. Код ниже:

Депозит.java

package com.example.project.model;

 import com.vividsolutions.jts.geom.Point
 import ...

@Entity
@Table(name="DEPOSITS")
public class Deposit {

  @Id
  @Column(name = "ID")
  private int id;

  @Column(name = "NAME")
  private String name;

  @Column(name = "GEOM",updatable = false)
  @Type(type="org.hibernate.spatial.GeometryType")
  private Point geometry;

  public Point getGeometry() {
    return geometry;
  }
}

Депозитконтроллер.java

package com.example.project;

import ...

@Controller
public class DepositController {
  private DepositService depositService;

  @Autowired(required = true)
  @Qualifier(value = "depositService")
  public void setDepositService(DepositService ds) { 
    this.depositService = ds;
  }

  //Index
  @RequestMapping(value = "/deposits", method = RequestMethod.GET)
  public String listDeposits(Model model) {
    model.addAttribute("listDeposits", this.depositService.listDeposits());
    return "deposits/index";
  }
}

депозиты/index.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ page session="false" %>
<html>
  <head>
    <title>Deposits Page</title>
  </head>
  <body>
    <c:if test="${!empty listDeposits}">
      <table>
        <tr>
          <th>Deposit ID</th>
          <th>Deposit Name</th>
          <th>Longitude</th>
          <th>Latitude</th>
          <th>Height</th>
        </tr>
        <c:forEach items="${listDeposits}" var="deposit">
          <tr>
            <td>${deposit.id}</td>
            <td>${deposit.name}</td>
            <td>${deposit.geometry.x}</td>
            <td>${deposit.geometry.y}</td>
            <td>${deposit.geometry.coordinate.z}</td>
          </tr>
        </c:forEach>
      </table>
    </c:if>
  </body>
</html>

Я знаю, что тип Point для JTS не раскрывает z-координату и что к нему можно получить доступ через объект координат. Код deposit.getGeometry().getCoordinates().z работает, как заставить его работать для моего представления .jsp?

Спасибо


person Michael    schedule 10.09.2015    source источник
comment
Какой тип класса Point вы используете? то есть включая имя пакета.   -  person Ben    schedule 11.09.2015


Ответы (1)


Я подозреваю, что ${deposit.geometry.x} переписывается в deposit.getGeometry().getX(), а getX() — это метод, который существует в этом классе, поэтому он работает.

Точно так же ${deposit.geometry.coordinate.z} будет переписан в deposit.getGeometry().getCoordinate().getZ(), а такого метода не существует.

Я бы просто добавил геттеры для X, Y и Z в класс Deposit, а затем использовал

${deposit.x}
${deposit.y}
${deposit.z}
person Ben    schedule 11.09.2015
comment
Приятно знать, что я поступаю правильно, потому что именно это я и сделал! Но мне было интересно, может ли JSTL получить доступ к z-значению без использования геттера. Несмотря на это, доступ к z-значению не имеет смысла из-за этой ошибки: hibernatespatial.org/jira/ просмотреть/HIBSPA-117 - person Michael; 23.09.2015