Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Please Help::How to display a Map with LIsts as Keys and Values using JSTL

843840Oct 8 2007 — edited Oct 12 2007
Hi,

I need some assistance on how to display a Map in JSP using struts or core JSTL. I have a HashMap which has a List of keys and each key maps to a value of an ArrayList.i.e I have an ArrayList of taxCodes and each taxCode maps to a value of taxDetails which is an ArrayList of details for for that particular taxCode. I have some trouble to display each taxCode then display taxDetails for each taxCode. Here is my code below:

OrderDetails.java
package orderitems;

import java.sql.*;
import java.util.*;

public class OrderDetails {
    private LineOder lineOrder;
    private Map lineItems;
    
    //returns an item number, key_item, from its unique keys
    public int getItemNumber(int key_item, String key_year,
            String key_office,String key_client,String key_company){
        Connection conn = null;
        Statement stat = null;
        ResultSet rst = null;
        int itmNum = 0;
        /**
         * key_item a unique number for an item.
         * key_year,key_office,key_client,key_company unique keys
         * for each order where this key_item is taken
         * from.
         */
        String select = "SELECT key_item FROM "+
                Constants.WEB_TABLE +" WHERE key_item = " + key_item +
                " AND key_year = '" + key_year + "'" +
                " AND key_office = '" + key_office + "'" +
                " AND key_client = '" + key_client + "'" +
                " AND key_company = '" + key_company +"'";
        
        DbConnection dbConn = new DbConnection();
        try {
            
            conn = dbConn.getDbConnection(Constants.WEB_JNDI);
            stat = conn.createStatement();
            rst = stat.executeQuery(select);
            if(rst.next()){
                itmNum = Integer.parseInt(rst.getString("key_item"));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally{
            SQLHelper.cleanUp(rst, stat, conn);
        }
        return itmNum;
    }
    //get a list of item number(item codes)
    public List getAllItemNumbers(String key_year,
            String key_office,String key_client,String key_company){
        
        List itemNumbers = new ArrayList();
        LineItem itemNumber = null;
        Connection conn = null;
        Statement stat = null;
        ResultSet rst = null;
        String select = "SELECT key_item FROM "+ Constants.WEB_TABLE +
                " WHERE key_year = '" + key_year + "'" +
                " AND key_office = '" + key_office + "'" +
                " AND key_client = '" + key_client + "'" +
                " AND key_company = '" + key_company + "'";
        DbConnection dbConn = new DbConnection();
        try {
            conn = dbConn.getDbConnection(Constants.WEB_JNDI);
            stat = conn.createStatement();
            rst = stat.executeQuery(select);
            while(rst.next()){
                itemNumber = new LineItem();
                itemNumber.setKey_item(Integer.parseInt(rst.getString("key_item")));
                
                itemNumbers.add(itemNumber);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally{
            SQLHelper.cleanUp(rst, stat, conn);
        }
        
        return itemNumbers;
    }
    //get a list of tax codes
    public List getAllTaxCodes(int key_item, String key_year,
            String key_office,String key_client,String key_company){
        
        Connection conn = null;
        Statement stat = null;
        ResultSet rst = null;
        ItemTax taxCode;
        List taxCodes = new ArrayList();
        int itemNum = getItemNumber(key_item, key_year,
                key_office,key_client,key_company);
        
        String select = "SELECT key_tax_code FROM "+
                Constants.WEB_TABLE +" WHERE key_item = " + itemNum +
                " AND key_year = '" + key_year + "'" +
                " AND key_office = '" + key_office + "'" +
                " AND key_client = '" + key_client + "'" +
                " AND key_company = '" + key_company +"'";
        
        DbConnection dbConn = new DbConnection();
        try {
            conn = dbConn.getDbConnection(Constants.WEB_JNDI);
            stat = conn.createStatement();
            rst = stat.executeQuery(select);
            
            while(rst.next()){
                taxCode = new ItemTax();
                
                taxCode.setKey_tax_code(rst.getString("key_tax_code"));
                
                taxCodes.add(taxCode);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally{
            SQLHelper.cleanUp(rst, stat, conn);
        }
        
        return taxCodes;
    }
    //////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////
    /////This methode returns a Map which am trying to display in JSP
    //use tax code to get tax details
    public Map getItemTaxDetails(String key_year,String key_office,
            String key_client,String key_company,int key_item){
        
        ItemTax taxDetail = null;
        List taxDetails = new ArrayList();
        List itemTaxCodes = new ArrayList();
        Map itemTaxDetails = new HashMap();
        Connection conn = null;
        Statement stat = null;
        ResultSet rst = null;
        //get a list of all tax codes of an item with a
        //given item number
        itemTaxCodes = getAllTaxCodes(key_item,key_year,
                key_office,key_client,key_company);
        
        DbConnection dbConn = new DbConnection();
        try {
            conn = dbConn.getDbConnection(Constants.WEB_JNDI);
            stat = conn.createStatement();
            for(Iterator taxCodeIter= itemTaxCodes.iterator(); taxCodeIter.hasNext();){
                ItemTax itemTaxCode = (ItemTax)taxCodeIter.next();
                String taxCode = itemTaxCode.getKey_tax_code();
                String select = "SELECT tax_type,tax_value," +
                        "tax_limit_val FROM "+ Constants.WEB_TABLE +
                        " WHERE key_item = "+ key_item +
                        " AND key_year = '" + key_year + "'" +
                        " AND key_office = '" + key_office + "'" +
                        " AND key_client = '" + key_client + "'" +
                        " AND key_company = '" + key_company +"'" +
                        " AND key_tax_code = '" + taxCode + "'";
                
                rst = stat.executeQuery(select);
                while(rst.next()){
                    taxDetail = new ItemTax();
                    
                    //records to be displayed only
                    taxDetail.setKey_item(Integer.parseInt(rst.getString("key_item")));
                    taxDetail.setTax_value(rst.getString("tax_value"));
                    taxDetail.setTax_limit_val(Float.parseFloat(rst.getString("tax_limit_val")));
                    //////other details records ommited//////////////////////////
                    
                    taxDetails.add(taxDetail);////An ArrayList of taxDetails for each taxCode
                }
                /**
                 * A HashMap which has all taxCodes of an item as its keys
                 * and an ArrayList of taxdetails as its values.
                 * I return this for display in a JSP.
                 */
                itemTaxDetails.put(taxCode,taxDetails);
            }
            System.out.println();
            System.out.println("*********CONSOLE OUTPUT*************");//display on console
            Set set = itemTaxDetails.keySet();
            Iterator iter = set.iterator();
            System.out.println("Key\t\tValue\r\n");
            while (iter.hasNext()) {
                Object taxCode=iter.next();
                Object details=itemTaxDetails.get(taxCode);
                System.out.println(taxCode +"\t" + details);
            }
            System.out.println("************************************");
            
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally{
            SQLHelper.cleanUp(rst, stat, conn);
        }
        
        return itemTaxDetails;
    }
    //////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////
    //details of an item with all its taxes
    public List getAllItemDetails(String key_year,
            String key_office,String key_client,String key_company){
        
        List lineItems = new ArrayList();
        List itemNumbers = new ArrayList();
        Map taxDetails = new HashMap();
        LineItem item = null;
        Connection conn = null;
        Statement stat = null;
        ResultSet rst = null;
        //A list of all item numbers in the declaration
        itemNumbers = getAllItemNumbers(key_year,
                key_office,key_client,key_company);
        
        DbConnection dbConn = new DbConnection();
        try {
            conn = dbConn.getDbConnection(Constants.WEB_JNDI);
            stat = conn.createStatement();
            for(Iterator itemIter= itemNumbers.iterator(); itemIter.hasNext();){
                LineItem itemNum = (LineItem)itemIter.next();
                int itemNumber = itemNum.getKey_item();
                
                String select = "SELECT item_description,item_mass," +
                        "item_cost" +
                        " FROM " + Constants.WEB_TABLE +
                        " WHERE key_year = '"+key_year+"'" +
                        " AND key_office = '"+key_office+ "'"+
                        " AND key_client = '"+key_client+ "'"+
                        " AND key_company = '"+key_company+ "'"+
                        " AND key_item = " + itemNumber;
                
                rst = stat.executeQuery(select);
                while(rst.next()){
                    item = new LineItem();
                    
                    item.setItem_description(rst.getString("item_description"));
                    item.setItem_mass(Float.parseFloat(rst.getString("item_mass")));
                    item.setKey_item(Integer.parseInt(rst.getString("item_cost")));
                    //////other details records ommited//////////////////////////
                    
                    /* A HashMap of all itemTaxeCodes as its keys and an 
                     * ArrayList of itemTaxedetails as its values
                     */
                    taxDetails = getItemTaxDetails(item.getKey_year(),item.getKey_office(),
                            item.getKey_client(),item.getKey_company(),item.getKey_item());
                    
                    //item tax details
                    item.setItmTaxes(taxDetails);
                    
                    //list of items with tax details
                    lineItems.add(item);
                }
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally{
            SQLHelper.cleanUp(rst, stat, conn);
        }
        
        return lineItems;
    }
    
    public Set getOrders(String key_year,String key_office,
            String key_client,String key_company){
        
        List lineItems = new ArrayList();
        Set lineOrders = new HashSet();
        Connection conn = null;
        Statement stat = null;
        ResultSet rst = null;
        LineOder lineOrder = null;
        String select = "SELECT * FROM " + Constants.WEB_TABLE +
                " WHERE key_year = '" + key_year + "'" +
                " AND key_office = '" + key_office + "'" +
                " AND key_client = '" + key_client + "'" +
                " AND key_company = '" + key_company + "'";
        
        DbConnection dbConn = new DbConnection();
        try {
            conn = dbConn.getDbConnection(Constants.WEB_JNDI);
            stat = conn.createStatement();
            rst = stat.executeQuery(select);
            while(rst.next()){
                lineOrder = new LineOder();
                
                lineOrder.setKey_year(rst.getString("key_year"));
                lineOrder.setKey_office(rst.getString("key_office"));
                lineOrder.setKey_client(rst.getString("key_client"));
                lineOrder.setKey_company(rst.getString("key_company"));
                ////list of items with all their details
                lineItems = getAllItemDetails(lineOrder.getKey_year(),lineOrder.getKey_office(),
                        lineOrder.getKey_client(),lineOrder.getKey_company());
                
                //setting item details
                lineOrder.setItems(lineItems);
                //a list of order with all details
                lineOrders.add(lineOrder);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally{
            SQLHelper.cleanUp(rst, stat, conn);
        }
        
        return lineOrders;
    }
}
Controller.java
package orderitems;

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Controller extends HttpServlet {
    private Map taxDetails = new HashMap();
    private OrderDetails orderDetails = null;
    
    protected void processRequest(HttpServletRequest request,
            HttpServletResponse response)throws
            ServletException, IOException {
        
        response.setContentType("text/html;charset=UTF-8");
        
        String key_year = "2007";
        String key_office = "VZX00";
        String key_company = "DG20";
        String key_client =  "ZI001";
        int key_item = 1;
        
        String nextView = "/taxdetails_list.jsp";
        
        orderDetails = new OrderDetails();
        taxDetails = orderDetails.getItemTaxDetails(key_year,key_office,
                key_company,key_client,key_item);
        
        //Store the collection objects into HTTP Request
        request.setAttribute("taxDetails", taxDetails);
        
        RequestDispatcher reqstDisp =
                getServletContext().getRequestDispatcher(nextView);
        reqstDisp.forward(request,response);
    }
    
    protected void doGet(HttpServletRequest request, 
            HttpServletResponse response)throws 
            ServletException, IOException {
        processRequest(request, response);
    }
    
    protected void doPost(HttpServletRequest request, 
            HttpServletResponse response)throws 
            ServletException, IOException {
        processRequest(request, response);
    }
}
taxdetails_list.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <title>Simple Tax Detail Diaplay ::</title>
        <link rel="stylesheet" type="text/css" href="imgs/orders.css"/>
    </head>
    <body>
        <jsp:useBean id="taxDetails" class="java.util.HashMap" scope="request"/>
        <table>
            <c:forEach items="${taxDetails}" var="hMap">
                <tr>
                    <td><c:out value="${hMap.key}" /></td>
                    <!--td><%--c:out value="${hMap.value}" /--%></td-->
                </tr>
            </c:forEach>
        </table>
    </body>
</html>
am displaying taxCodes(in this case i have VAT and ICD) fine but cant figure out how to display a list of value for each taxCode.Here is the output am getting
both in my JSP and on the console:

*******************************CONSOLE OUTPUT****************************
Key Value

ICD [orderItems.ItemTax@13e6226, orderItems.ItemTax@9dca26]
VAT [orderItems.ItemTax@13e6226, orderItems.ItemTax@9dca26]
**********************************************************************************


Edited by: aiEx on Oct 8, 2007 6:54 AM
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 9 2007
Added on Oct 8 2007
33 comments
334 views