【问题标题】:how to print list of list and other type of data in jsp如何在jsp中打印列表列表和其他类型的数据
【发布时间】:2020-03-10 12:30:46
【问题描述】:

我正在尝试在 spring mvc 中从数据库中获取数据,这是我获取数据的代码

@Override
public List getOrderDetail(Integer shop_id) {
    // TODO Auto-generated method stub
    SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery(
            "SELECT order_id,shop_id,delivery_address,total_amount FROM master_order WHERE shop_id =" + shop_id);

    SQLQuery query1 = sessionFactory.getCurrentSession().createSQLQuery(
            "SELECT itm.image,itm.name,itm.brand,odr.quantity,itm.offerprice,(itm.offerprice*odr.quantity) AS Total,modr.cust_id FROM master_order modr\r\n"
                    + "INNER JOIN tblorder odr ON modr.order_id = odr.order_id INNER JOIN item itm on odr.item_id = itm.item_id WHERE modr.shop_id ="+shop_id);

    query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
    query1.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);

    List results = query.list();
    List results1 = query1.list();

    results.add(results1);

    System.out.println(results);

    return results;
}

以上System.out.println(results); 语句给出以下输出

[{shop_id=1, delivery_address=1, abc, xyz, aaa, USA, order_id=6, total_amount=1800}, [{image=Screenshot (19).png, quantity=8, Total=800, name=DhruvRajkotiya, offerprice=100, brand=gsgsrgs, cust_id=2}, {image=Screenshot (19).png, quantity=10, Total=1000, name=qwe, offerprice=100, brand=asdf, cust_id=2}, {image=Screenshot (19).png, quantity=1, Total=100, name=ewq, offerprice=100, brand=gsgsrgs, cust_id=2}]]

我想在 jsp 页面中打印 order_id 以及 {image=Screenshot (19).png, quantity=10, Total=1000, name=qwe, offerprice=100, brand=asdf, cust_id=2}

这是我的控制器代码

@RequestMapping(value = "/notifications", method = RequestMethod.GET)
public String notifications(Model model, HttpServletRequest request) {
    if (request.getSession().getAttribute("shopkeeper") == null) {
        return "redirect:login";

    } else {
        Shopkeeper sp = (Shopkeeper) request.getSession().getAttribute("shopkeeper");
        model.addAttribute("order", shopkeeperService_shopkeeper.getOrderDetail(sp.getSk_id()));
        return "shopkeeper/notifications";
    }
}

这是我的jsp代码

<div class="row">
                    <c:forEach items="${ order}" var="order">
                        <div class="col-lg-12">
                        <div class="card">
                            <div class="card-header" style="padding-bottom: 5px;">
                                <h6># ${order.shop_id }</h6>
                            </div>
                            <div class="card-body">
                                <div class="col-lg-2" style="float: left;">Image</div>
                                <div class="col-lg-2" style="float: left;">Product name</div>
                                <div class="col-lg-2" style="float: left;">Product brand
                                </div>
                                <div class="col-lg-1" style="float: left;">Quantity</div>
                                <div class="col-lg-1" style="float: left;">Unit Price</div>
                                <div class="col-lg-1" style="float: left;">Total</div>
                                <div class="col-lg-3" style="float: left;">Approve of
                                    request</div>
                            </div>
                            <div class="card-body">
                                <div class="col-lg-6" style="float: left;">Delivery
                                    Address</div>
                                <div class="col-lg-6" style="float: left;">Total Amount</div>
                            </div>
                        </div>
                    </div>
                    </c:forEach>
                </div>

我想打印

我的问题概念是 order_id,address,total_amount 一次和多次购买的物品,可以是一个或多个

如何打印

【问题讨论】:

    标签: java spring hibernate jsp jstl


    【解决方案1】:

    将一些数据“发送”到 JSP 页面的方法是设置和传递请求(或会话)属性。

    从处理当前请求的 Servlet 中,在 doGet() 或 doPost() 方法中(取决于使用的 HTTP 请求方法),您可以:

    request.setAttribute("attributeName", attributeObject);
    request.getRequestDispatcher("<name_of_your_page>.jsp").forward(request, response);
    

    其中attributeName 是一个字符串,它将被视为对JSP 页面上attributeObject 的引用。

    然后在 JSP 页面上,您可以使用 JSTL 库和表达式语言(请参阅 this tutorial 了解 JSTL 和 this one 了解一般 JSP 和 EL)。要遍历已作为请求属性传递的列表,请使用来自 JSTL 的 &lt;c:forEach&gt; 标记。

    首先,您需要通过将此行放在 JSP 的顶部来导入核心 JSTL 标记:

    &lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;

    另一个有用的声明是:

    &lt;%@ page isELIgnored="false" %&gt;

    它告诉您的网络浏览器评估用 EL 编写的表达式,而不是将它们作为纯文本包含在 HTML 正文中。

    如果您使用字符串“orders”将集合集命名为属性,&lt;c:forEach&gt; 标记用法可能类似于下图。您可能希望以不同的方式构造它,并且字段名称(如order.order_id)在您的情况下可能会有所不同,但我认为您可以理解。

    <c:forEach item="order" items="${requestScope.orders}">
        <p>${order.order_id}</p>
        <p>${order.delivery_address}</p>
        ...
    </c:forEach>
    

    【讨论】:

      【解决方案2】:

      您可以将列表保存为模型属性。比如你要保存当前用户:

      model.addAttribute("user",user);
      

      并在 div 内的 jsp 文件中访问此属性:

      <div> ${user.name} </div> 
      

      控制器方法可能如下所示:

      @RequestMapping( value = "/user", method = RequestMethod.GET )
      public String displayUser(final Model model)
      {
         final User user = userService.findUserById(1); // here you'll provide custom implementation
         model.addAttribute("user",user);
         return "somejsppage.jsp";
      }
      

      如果你想为你的模型添加一个列表:

       final List<User> users = fillUserList(); // your implementation here
       model.addAttribute("users",users);
      

      您可以通过&lt;c:forEach&gt; 标签访问该列表中的每个元素:

      <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
      <html>
         <body>
            <table>
               <tr>
                  <th>First Name</th>
               </tr>
               <c:forEach items="${users}" var="user">
                  <tr>
                      <td>${user.firstName}</td>
                  </tr>
               </c:forEach>
            </table>
         </body>
      </html>
      

      【讨论】:

      • 我已经尝试过了,但它给了我错误 'java.lang.NumberFormatException: For input string: "order_id" '
      • 当我尝试没有 results.add(results1);声明它将完美地工作
      • 但我想要两个结果
      • 一个可能的问题是 forEach 遍历 results 列表中的每个项目,但在最后一步,有一个 list 不是实体对象,所以当“结果”是一个列表时,您正在尝试获取 ${result.order_id}。
      • 但是当我只打印 order_id 时也会出现这个错误...??
      猜你喜欢
      • 2022-01-14
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 2018-01-12
      相关资源
      最近更新 更多