【问题标题】:How to Display two tables data (child and parent table) on a JSP page in one table using Spring MVC如何使用 Spring MVC 在一个表的 JSP 页面上显示两个表数据(子表和父表)
【发布时间】:2015-01-30 05:41:30
【问题描述】:

我正在开发一个基于在线购物网络应用程序的项目。在这个项目中,我使用的是 Hibernate 4.3 和 Spring MVC 3.1。我有两张表,一张是订单表(orderid,customerid,dateorderplaced,description),第二张是客户(父表)表。 我想根据订单表的外键(customerid)显示订单和客户名称的完整详细信息,我只能在 jsp 页面上显示客户 ID 而不是客户名称。

订单表:-

DROP TABLE IF EXISTS `pib`.`orders`;
CREATE TABLE  `pib`.`orders` (
`orderid` int(10) unsigned NOT NULL auto_increment,
`customerid` int(10) unsigned NOT NULL,
`dateorderplaced` datetime default NULL,
`orderdetails` varchar(200) NOT NULL,
PRIMARY KEY  (`orderid`),
KEY `FK_orders_1` (`customerid`),
CONSTRAINT `FK_orders_1` FOREIGN KEY (`customerid`) REFERENCES `customers` (`customerid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

客户表:-

DROP TABLE IF EXISTS `pib`.`customers`;
CREATE TABLE  `pib`.`customers` (
`customerid` int(10) unsigned NOT NULL auto_increment,
`firstname` varchar(45) default NULL,
`lastname` varchar(45) default NULL,
`loginname` varchar(45) NOT NULL,
`loginpassword` varchar(45) NOT NULL,
`email` varchar(45) NOT NULL,
`mobile` varchar(13) default NULL,
`address` varchar(45) default NULL,
`city` varchar(45) default NULL,
`state` varchar(45) default NULL,
`pincode` varchar(45) default NULL,
`createddate` date default NULL,
`role` varchar(45) NOT NULL,
PRIMARY KEY  (`customerid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Order.java :-

public class Orders{
private Integer orderid;
 private Customers customers;
 private Date dateorderplaced;
 private String orderdetails;
//setters n getters
}

Cutomers.java :-

public class Customers  implements java.io.Serializable {


 private Integer customerid;
 private String firstname;
 private String lastname;
 private String loginname;
 private String loginpassword;
 private String email;
 private String mobile;
 private String address;
 private String city;
 private String state;
 private String pincode;
 private Date createddate;
 private String role;
// setters n getters
}

AdminOrderController.java :-

@Controller
public class AdminOrderController {
OrdersDAO ordersDAO;
CustomersDAO customersDAO;
@RequestMapping(value = "/vieworders.htm")
public ModelAndView prepareOrderList(){
    ModelAndView mav = new ModelAndView();
    mav.addAllObjects(prepareOrderModel());
    mav.setViewName("admin/vieworders");
    return mav;
}

guyzz 我试图在 jsp 页面上显示的是 orderid 、客户的名字和姓氏或订单表的其他字段。希望你们明白我想做什么。提前致谢。

public Map prepareOrderModel(){
    Map map = new HashMap();
    map.put("orderList", ordersDAO.findAll());
    //map.put("customersList", customersDAO.findAll());
    return map;
}

<table>
        <tbody>
        <% i=0; %>
        <tr>
        <th>#</th>
        <th>Order ID</th>
        <th>Customer</th>
        <th>Date</th>

        </tr>
          <c:forEach items="${orderList}" var="ol">
        <tr>
        <td><%= ++i %></td>
        <td>${ol.orderid}</td>
        <td>${ol.customer}</td>
        <!-- <td>${ol.firstname}</td>
        <td>${ol.cutomers.firstname}</td> -->
        <td>${ol.dateorderplaced}</td>
       </tr>
       </c:foreach> </table>

【问题讨论】:

  • 最好给我们看jsp代码和prepareOrderModel()方法代码,而不是你的table map。
  • @VPK public Map prepareOrderModel(){ Map map = new HashMap(); map.put("orderList", ordersDAO.findAll()); //map.put("customersList", customersDAO.findAll());返回地图; } thnx 回复
  • 您在${ol.dateorderplaced} 中获得了价值吗?试试这个 ${ol.customers.firstname} 而不是 ${custName}。
  • @VPK 是的,我得到了这个值。
  • @VPK 我已经尝试过这种可能性。但不工作。

标签: spring hibernate jsp


【解决方案1】:

什么是 ${custName}?也许应该是 ${ol.custName} 或 ${ol.customer.custName} 之类的

【讨论】:

  • jsp中没有变量custName。如果您遍历 orderList 并使用 var="ol" 那么所有数据都应该在 ol 中并以 ${ol.请检查 ordersDao.findAll() 是否返回带有初始化客户属性的订单。
  • 那么 Customers 对象存在于 Orders 对象中并且设置了所有必要的属性? Hibernate设置数据并没有LazyInitalization?
  • yepp,所有属性都设置好了,我还发布了 Controller Class 和 prepareOrderModel 类。请检查一下。我认为还有另一种方法可以获取客户类属性,例如 firstname 、 lastname 等。
  • 也许这很明显,但是如果您在调试期间检查客户数据,那么应该没问题,因为当您尝试检查客户中的字段时,休眠获取此对象和数据,看起来所有数据都已设置.但是,如果您通过 ordersDAO.findAll() 获取订单并且 Orders 对象没有将客户设置为 fetchMode=eager,那么客户将只是没有数据的代理。并且 ${ol.customers.firstname} 抛出 LazyInitializationException。还有其他选项 - 数据库中没有客户或客户 ID 错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
相关资源
最近更新 更多