struts2與JFreeChart、JasperReport整合

1.struts2與jfreechart結合 java

(1),查看幫助文檔便可以知道如何配置。首先把struts2文件夾下的lib中的 struts2-jfreechart-plugin-2.1.8.1.jar包加入到項目下,注意此時的struts2-jfreechart- plugin-2.1.8.1.jar中的struts-plugin.xml文件中應該爲: mysql

<struts>
    <package name="jfreechart-default " extends="struts-default ">    
      <result-types>
       <result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult">
        <param name="height">150</param>
        <param name="width">200</param>
       </result-type>
    </result-types>
    </package> sql

</struts>
(2).在struts.xml文件中,配置以下相似的信息:數據庫

<package name="default" namespace="/" extends="jfreechart-default ">// 從 jfreechart-default繼承 apache

   <action name="select" class="com.biped.struts.action.SelectAction">
          <result name="success" type="chart">
           <param name="height">400</param>
         <param name="width">600</param>
          </result>
    </action> dom

</package> jsp

(3)在action中寫上相似的內容,如: ide

package com.biped.struts.action; this

import java.awt.Font;
import java.util.List;
import java.util.Map; spa

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class SelectAction extends ActionSupport{

private JFreeChart chart;//必須提供該屬性,提供getter方法,且名字要爲chart

private List<String> interest;//這是接收用戶選擇的項目

public JFreeChart getChart() {//須要本身產生JFreeChart對象
   JFreeChart chart = ChartFactory.createBarChart3D("愛好興趣調查", "項目","比例", createDataset(), PlotOrientation.VERTICAL, true, true,true);
 
   TextTitle tt = chart.getTitle();
   tt.setFont(new Font("黑體",Font.BOLD,20));
 
   chart.getLegend().setItemFont(new Font("宋體",Font.ITALIC,10));
 
   CategoryPlot plot = chart.getCategoryPlot();
   CategoryAxis domainAxis = plot.getDomainAxis();
   domainAxis.setLabelFont(new Font("宋體",Font.ITALIC,14));
   domainAxis.setTickLabelFont(new Font("宋體",Font.ITALIC,14));
   domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
 
   ValueAxis valueAxis = plot.getRangeAxis();
   valueAxis.setLabelFont(new Font("宋體",Font.ITALIC,14));
   valueAxis.setTickLabelFont(new Font("宋體",Font.ITALIC,14));
   return chart;
}
public List<String> getInterest() {
   return interest;
}

public void setChart(JFreeChart chart) {
   this.chart = chart;
}

public void setInterest(List<String> interest) {
   this.interest = interest;
}

@Override
public String execute() throws Exception {
   return SUCCESS;
}

@SuppressWarnings("unchecked")
public Map addSelectResult(List<String> list){//應該從數據庫中取,
   //這裏只是爲了模擬,放在Application中
   ActionContext context = ActionContext.getContext();
   Map map = context.getApplication();
   for(String str : list){
    if(null==map.get(str)){
     map.put(str,1);
    }else{
     map.put(str, (Integer)map.get(str)+1);
    }
   }
   return map;
}

@SuppressWarnings("unchecked")
public CategoryDataset createDataset(){//收集數據,併產生相應的Dataset
   DefaultCategoryDataset dataset = new DefaultCategoryDataset();
   Map map = addSelectResult(this.getInterest());
 
   dataset.setValue((Integer)map.get("football"), "a", "足球");
   dataset.setValue((Integer)map.get("basketball"), "b", "籃球");
   dataset.setValue((Integer)map.get("volleyball"), "c", "排球");
   dataset.setValue((Integer)map.get("pingpong"), "d", "乒乓球");
   dataset.setValue((Integer)map.get("badminton"), "e", "羽毛球");
 
   return dataset;
}
}

(4).jsp中的內容:

<s:form action="select">

<s:checkbox label="足球" name="interest" fieldValue="football" labelposition="left"></s:checkbox>
<s:checkbox label="籃球" name="interest" fieldValue="basketball" labelposition="left"></s:checkbox>
<s:checkbox label="排球" name="interest" fieldValue="volleyball" labelposition="left"></s:checkbox>
<s:checkbox label="乒乓球" name="interest" fieldValue="pingpong" labelposition="left"></s:checkbox>
<s:checkbox label="羽毛球" name="interest" fieldValue="badminton" labelposition="left"></s:checkbox>
<s:submit></s:submit>
</s:form>


(5).結果:

 

2.和JFreeChart相似,從lib目錄下拷貝struts2-jasperreports-plugin-2.1.8.1.jar包到項目中,其中的struts-plugin.xml應該爲這樣:

<struts>
    <package name="jasperreports-default" extends="struts-default">
   
    <result-types>
       <result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/>
    </result-types>
    </package>

</struts>

接下來配置struts.xml,能夠參見struts2的幫助文檔,從文檔能夠知道,如今的jasperreport插件基本上都是隻支持list 類型的數據源,所以要是數據源是如JRDataSource等的,能夠先存在list中,而後再進行配置,文檔中說明了幾個參數是必需要指定的,如:

<result name="success"

 type="jasper"

>

 

  <param name="location"

>

foo.jasper</param>

 

  <param name="dataSource"

>

mySource</param>

 

  <param name="format"

>

CSV</param>

 

</result>

仿照其配置,能夠寫上:

<package name="default" namespace="/" extends="jasperreports-default">
      <action name="HTML" class="com.biped.struts2.action.ReportAction">
            <result type="jasper">
            <param name="location">
                    /reports/reportTest.jasper
                </param>
            <param name="dataSource">list</param>
            <param name="format">HTML</param>
            </result>
        </action>
    </package>
其中的format格式應該參考JasperReportConstants類中的常量。

最後在對應的ReportAction上的java內容爲:

package com.biped.struts2.action;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.biped.struts2.domain.User;
import com.opensymphony.xwork2.ActionSupport;

public class ReportAction extends ActionSupport {

private static final long serialVersionUID = 1L;
@SuppressWarnings("unused")
private List<User> list;

public List<User> getList() {
   return getDataSource();
}

public void setList(List<User> list) {
   this.list = list;
}

// 這裏把鏈接數據庫的方法放在一塊兒
private static Connection getConnection() {
   Connection conn = null;
   try {
    Class.forName("com.mysql.jdbc.Driver");
    String dbUrl = "jdbc:mysql://localhost:3306/drp";
    String username = "root";
    String password = "root";
    conn = DriverManager.getConnection(dbUrl, username, password);
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
   } catch (SQLException e) {
    e.printStackTrace();
   }
   return conn;
}

@SuppressWarnings("static-access")//取出數據並填充list
public List<User> getDataSource() {
   String sql = "select * from t_user";
   Connection conn = this.getConnection();
   PreparedStatement statement = null;
   ResultSet result = null;
   List<User> list = new ArrayList<User>();
   try {
    User user = null;
    statement = conn.prepareStatement(sql);
    result = statement.executeQuery();
    while (result.next()) {
     user = new User();
     user.setUserId(result.getString("user_id"));
     user.setUserName(result.getString("user_name"));
     user.setPassword(result.getString("password"));
     user.setEmail(result.getString("email"));
     user.setCreateDate(result.getTimestamp("create_date"));
     list.add(user);
    }
   } catch (SQLException e) {
    e.printStackTrace();
   } finally {
    try {
     if (result != null) {
      result.close();
      result = null;
     }
     if (statement != null) {
      statement.close();
      statement = null;
     }
     if (conn != null) {
      conn.close();
      conn = null;
     }
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   return list;
}

@Override
public String execute() throws Exception {
   return SUCCESS;
}

}

User.java:

package com.biped.struts2.domain;
import java.util.Date;

public class User {
private String userId;
private String userName;
private String password;
private String email;
private String phone;

public String getUserId() {
   return userId;
}

public void setUserId(String userId) {
   this.userId = userId;
}

@Override
public String toString() {
   return userId+","+userName+","+password+","+phone+","+email;
}

public String getUserName() {
   return userName;
}

public void setUserName(String userName) {
   this.userName = userName;
}

public String getPassword() {
   return password;
}

public void setPassword(String password) {
   this.password = password;
}

public String getEmail() {
   return email;
}

public void setEmail(String email) {
   this.email = email;
}

public String getPhone() {
   return phone;
}

public void setPhone(String phone) {
   this.phone = phone;
}

public Date getCreateDate() {
   return createDate;
}

public void setCreateDate(Date createDate) {
   this.createDate = createDate;
}

private Date createDate;
}

結果:

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/yakoo5/archive/2010/05/31/5638226.aspx

相關文章
相關標籤/搜索