2014-09-12 31 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