2014-09-12 58 views
0

我想访问JSP标记内的JSP会话数组值。我可以使用下面的代码在JSTL标签内完成它。在JSP标记内访问会话数组变量

<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标签内上面的代码时,我得到一个错误。

UPDATE:

不幸的是,提供的答案没有工作。

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(); 

输出为 “[email protected]”。

任何人都可以提供与上述JSTL等效的JSP代码吗?

+0

你仍然使用C标签?即使删除了标签,您是否仍然在 2014-09-12 10:46:40

+0

不是一个好的设计,可以在scriptlet中移动。 – Braj 2014-09-12 11:08:43

回答

0
<% 
    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列表,所以使用上面的代码,你可以得到车项目列表中,遍历它

0
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> 

<% }%> 
+0

尝试添加一个关于为什么您认为此解决方案最适合回答原始问题的小解释,谢谢。 – m4rtin 2014-09-12 11:13:42

+0

哦,好的,谢谢。 – Chaitu 2014-09-12 11:44:08

+0

没有工作,请参阅更新后的问题..我试图访问JSP标记中的会话值,因为我想进行数据验证并将该值写入文本文件。 – user3421325 2014-09-16 04:37:37