2013-06-28 99 views
0

enter image description here当我尝试从HashMap检索值时,我使用getValue方法。但getValue方法位于Struts2的迭代标记内,因此它显示的是不需要的值。我如何避免这种情况?在我的JSP页面中,我正在创建表格,在那里我想从<th>标签中的数据库中设置orderdate。我的意思是从HashMap我收到orderdate,结果,dataamount,计数。在<th>我想要orderdate去坐,并在<tr>我想剩下的三个值去坐。我该怎么做 ?有没有什么办法从hashmap中获得单个值?

import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 
import java.util.Set; 

public class JanuaryAction { 
    private String from; // creating variables to access input values. 
    private String to; // creating variables to access input values. 
    Map abc1 = new HashMap(); // Getting the map objects to store tha values 

    public Map getAbc1() { /* Creating the setters and getters */ 
     return abc1; 
    } 

    public void setAbc1(Map abc1) { 
     this.abc1 = abc1; 
    } 

    public String getFrom() { 
     return from; 
    } 

    public void setFrom(String from) { 
     this.from = from; 
    } 

    public String getTo() { 
     return to; 
    } 

    public void setTo(String to) { 
     this.to = to; 
    } 

    public Map<String, String> getAbc() { 
     return abc; 
    } 

    public void setAbc(Map<String, String> abc) { 
     this.abc = abc; 
    } 

    Map<String, String> abc = new HashMap<String, String>(); 

    Map<String, List<ReportClass>> map = new HashMap<String, List<ReportClass>>(); // Using 
                        // Map 
                        // interface 
                        // implementing 
                        // hashmap 

    public Map<String, List<ReportClass>> getMap() { 
     return map; 
    } 

    public void setMap(Map<String, List<ReportClass>> map) { 
     this.map = map; 
    } 

    public String execute() throws Exception { 

     String fromdate = getFrom(); 
     System.out.println(fromdate); 
     String todate = getTo(); 
     System.out.println(todate); 

     Connection con = GetCon.getCon(); 
     Statement statement = con.createStatement(); 

     ResultSet resultset = statement 
       .executeQuery("SELECT MarketPlace,OrderDate, ROUND(SUM(Total),2), COUNT(*) , ROUND(ROUND(SUM(Total),2)/ COUNT(*),2) FROM vend_printed WHERE OrderDate >='" 
         + fromdate + "' AND OrderDate <='" + todate + "' GROUP BY OrderDate,MarketPlace"); 

     while (resultset.next()) { 
      String marketplace = resultset.getString(1);// get the first column 
                 // in marketplace 
      String orderdate = resultset.getString(2);// get the second column 
                 // in orderdate 
      Double datamount = resultset.getDouble(3);// get the third column in 
                 // datamount 
      Integer count = resultset.getInt(4);// get the fourth column in 
               // count 
      Double result = resultset.getDouble(5); // get the fifth column in 
                // result 
      ReportClass a = new ReportClass(); // create an object to access 
               // pojo class. 

      a.setMarketplace(marketplace); // setting the values in pojo class 
      a.setOrderdate(orderdate); 
      a.setDataamount(datamount); 
      a.setCount(count); 
      a.setResult(result); 

      if (map.get(marketplace) != null) { // if the value in marketplace 
               // is null then go to else 
               // statement or go to if 
               // statement. 
       map.get(marketplace).add(a); // using the key add one complete 
               // row values from a to 
               // marketplace 
      } else { 
       List<ReportClass> optionsVO = new ArrayList<ReportClass>(); // create 
                      // a 
                      // list 
                      // optionsVo 
       optionsVO.add(a); // store Reportclass values in List. 
       map.put(marketplace, optionsVO); // storing it in map. 
       /* System.out.println(map.get(marketplace).toString()); */ 
      } 

     } 
     Set s = map.entrySet(); // A map entry (key-value pair).creating Set 
           // interface. 
     Iterator i = s.iterator(); 
     while (i.hasNext()) { 

      List<ReportClass> tempList = (List<ReportClass>) ((Entry) i.next()).getValue(); // creating 
                          // a 
                          // temporary 
                          // list 

      for (ReportClass reportClassObj : tempList) { 
       System.out.println(reportClassObj.getMarketplace());// display 
                    // values. 
       System.out.println(reportClassObj.getDataamount()); 
       System.out.println(reportClassObj.getOrderdate()); 
       System.out.println(reportClassObj.getCount()); 
       System.out.println(reportClassObj.getResult()); 
      } 
     } 

     /* System.out.println(map.size()); */ 
     return "success"; 
    } 
} 

在我的jsp我有一个代码。

<s:iterator var="studentEntry" status="stat" value="map.entrySet()"> 
Key: <s:property value="%{#studentEntry.getKey()}"/> 
Value: <s:property value="%{#studentEntry.getValue()}"/><br> 

</s:iterator> 
+1

不要让我们猜你在做什么,并显示代码。 –

+1

请给我们一些代码,请! – Goatcat

+0

对于JSP/EL,只需指定您想要获取其值的密钥?例如。 '$ {bean.map.key}'或'$ {bean.map ['key.with.periods']}'。或者Struts2有不同的方式吗? – BalusC

回答

0

请尝试下面的代码,它必须工作。

<s:iterator value="map"> 
<s:iterator value="key"> 
<s:iterator value="value"> 
<th><s:property value="orderdate"/></th> 
<td rowspan="4"><s:property value="marketplace"/></td> 
<tr> <td><s:property value="dataamount"/></td></tr> 
<tr><td><s:property value="count"/></td></tr> 
<tr><td><s:property value="result"/></td></tr> 
</s:iterator> 
</s:iterator> 
</s:iterator> 
+0

谢谢你,它来到非常接近我的答案.. – user2424732

0

无论你组条目,你必须首先遍历组,然后与其它条目组打通所有的值或选择要遍历组。

<s:iterator value="map"> 
<s:iterator var="studentEntry" value="value"> 
    ReportClass: <s:property value="%{#studentEntry.toString()}"/><br> 
</s:iterator> 
</s:iterator> 
0

其实你并不需要使用entrySet只使用map变量<s:iterator>标签的value属性和value关键字作为第二个迭代器的价值。然后你可以在<s:property>标记中直接引用迭代器中ReportClass的属性。

<s:iterator value="map"> 
    <s:iterator value="value"> 
    <table>   
     <tr><th colspan="3"><s:property value="orderdate"/></th></tr> 
     <tr> 
     <td><s:property value="dataamount"/></td> 
     <td><s:property value="count"/></td> 
     <td><s:property value="result"/></td> 
     </tr> 
    </table> 
    </s:iterator> 
</s:iterator> 
+0

你的答案看起来非常接近我。是否有可能获得我在图像中显示的表 – user2424732

+0

您的问题是关于从地图获取值,这就是答案。接受/ upvote它,如果你有另一个问题问一个新的。 –

+0

正如我明确提到的,我从地图中得到的值应该像图中所示的那样坐在桌子上,是否有可能是队友?当然,我会upvote和接受一旦我完全满意... – user2424732

相关问题