【问题标题】:Access session array variables inside JSP tag访问 JSP 标记内的会话数组变量
【发布时间】:2014-09-12 10:43:07
【问题描述】:

我想访问 JSP 标记内的 JSP 会话数组值。我可以使用以下代码在 JSTL 标记中实现它。

<c:forEach var="cartItem" items="${cart.cartItems}"
           varStatus="counter">


    <div class="each_amt_shwtot">
        <div class="eachamtshw_nametot" align="left"><h4>${cartItem.partNumber}</h4></div>
        <div class="eachamtshw_qty"><h4>${cartItem.quantity}</h4></div>
        <div class="eachamtshw_price"><h4>${cartItem.unitCost} LKR</h4></div>

    </div>

</c:forEach>

但我想在 JSP 标签 中访问这些值。尝试在 JSP 标签内使用上述代码时出现错误。

更新:

很遗憾,提供的答案无效。

List<CartItem> or Array[] carItems did not work. 

以下是 CartBean 文件

package lk.company.app.webapp.beans;

import java.util.ArrayList;

public class CartBean {
 private ArrayList alCartItems = new ArrayList();
 private double dblOrderTotal ;


 public void updateCartItem(String strItemIndex, String strQuantity) {
  double dblTotalCost = 0.0;
  double dblUnitCost = 0.0;
  int iQuantity = 0;
  int iItemIndex = 0;
  CartItemBean cartItem = null;
  try {
   iItemIndex = Integer.parseInt(strItemIndex);
   iQuantity = Integer.parseInt(strQuantity);
   if(iQuantity>0) {
    cartItem = (CartItemBean)alCartItems.get(iItemIndex-1);
    dblUnitCost = cartItem.getUnitCost();
    dblTotalCost = dblUnitCost*iQuantity;
    cartItem.setQuantity(iQuantity);
    cartItem.setTotalCost(dblTotalCost);
    calculateOrderTotal();
   }
  } catch (NumberFormatException nfe) {
   System.out.println("Error while updating cart: "+nfe.getMessage());
   nfe.printStackTrace();
  }

 }

 public void addCartItem(String strModelNo, String strDescription,
String strUnitCost, String strQuantity) {
  double dblTotalCost = 0.0;
  double dblUnitCost = 0.0;
  int iQuantity = 0;
  CartItemBean cartItem = new CartItemBean();
  try {
   dblUnitCost = Double.parseDouble(strUnitCost);
   iQuantity = Integer.parseInt(strQuantity);
   if(iQuantity>0) {
    dblTotalCost = dblUnitCost*iQuantity;
    cartItem.setPartNumber(strModelNo);
    cartItem.setModelDescription(strDescription);
    cartItem.setUnitCost(dblUnitCost);
    cartItem.setQuantity(iQuantity);
    cartItem.setTotalCost(dblTotalCost);
    alCartItems.add(cartItem);
    calculateOrderTotal();
   }

  } catch (NumberFormatException nfe) {
   System.out.println("Error while parsing from String to primitive types: "+nfe.getMessage());
   nfe.printStackTrace();
  }
 }

 public void addCartItem(CartItemBean cartItem) {
  alCartItems.add(cartItem);
 }

 public CartItemBean getCartItem(int iItemIndex) {
  CartItemBean cartItem = null;
  if(alCartItems.size()>iItemIndex) {
   cartItem = (CartItemBean) alCartItems.get(iItemIndex);
  }
  return cartItem;
 }

 public ArrayList getCartItems() {
  return alCartItems;
 }
 public void setCartItems(ArrayList alCartItems) {
  this.alCartItems = alCartItems;
 }
 public double getOrderTotal() {
  return dblOrderTotal;
 }
 public void setOrderTotal(double dblOrderTotal) {
  this.dblOrderTotal = dblOrderTotal;
 }

 protected void calculateOrderTotal() {
  double dblTotal = 0;
  for(int counter=0;counter<alCartItems.size();counter++) {
   CartItemBean cartItem = (CartItemBean) alCartItems.get(counter);
   dblTotal+=cartItem.getTotalCost();

  }
  setOrderTotal(dblTotal);
 }

}

但我可以使用 JSTl 代码打印该值,而不是在 JSP 标记内。

<div class="eachamtshw_price"><h10>${cart.orderTotal} LKR</h10></div>

我得到了意想不到的结果, 当我使用以下代码时

String group=session.getAttribute("cart").toString();

输出是“lk.company.app.webapp.beans.CartBean@1608fae”。

谁能提供与上述 JSTL 等效的 JSP 代码?

【问题讨论】:

  • 你还在用c标签吗?即使您删除了标签 java.sun.com/jsp/jstl/core" %>,您的 jsp 文件中是否还有
  • 在 scriptlet 中移回不是一个好的设计。

标签: java jsp session jstl


【解决方案1】:
<%
   List<CartItem> cartItemsList = (List<CartItem>) session.getAttribute("cart");

    for(CartItem cartItem : cartItemsList) { %>
      <div class="each_amt_shwtot">
        <div class="eachamtshw_nametot" align="left"><h4><%=cartItem.getPartNumber()%></h4></div>
        <div class="eachamtshw_qty"><h4><%=cartItem.getQquantity()%></h4></div>
        <div class="eachamtshw_price"><h4><%=cartItem.getUnitCost()%> LKR</h4></div>
      </div>
  <%  }   %>

也许您可以相应地修改此代码,但我假设您已将 CartItem 列表存储在会话中,因此使用上面的代码您可以获取 Cart Items 列表并对其进行迭代

【讨论】:

    【解决方案2】:
    Array[] carItems = (Array[])session.getAttribute("cart");
    
    
     for(CarItem caritem: carItems){
    
     %>
     <div class="each_amt_shwtot">
            <div class="eachamtshw_nametot" align="left"><h4><%= caritem.getPartNumber() %></h4></div>
            <div class="eachamtshw_qty"><h4><%= caritem.getQuantity() %></h4></div>
            <div class="eachamtshw_price"><h4><%= caritem.getUnitCost() %> LKR</h4></div>
    
        </div>
    
     <% }%>
    

    【讨论】:

    • 尝试添加一个小解释,说明为什么您认为此解决方案最适合回答原始问题,谢谢。
    • 没用,请查看更新后的问题。我正在尝试使用 JSP 标签访问会话值,因为我想进行数据验证并将该值写入文本文件。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签