我用的是struts2.1.6,從struts2的自帶的demo當(dāng)中可以看到它的web.xml配置與之前的有點(diǎn)不同,有另外一種配置:
- <filter>
- <filter-name>Struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>Struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
這樣的配置可以在web.xml配置我們的serlvet,如果寫(xiě)成以前的寫(xiě)法你配置上serlvet會(huì)報(bào)錯(cuò)。
將我們?cè)O(shè)置的報(bào)表文件和編譯文件放到WebRoot下面的jasper下面,添加struts2對(duì)jasperReport的插件。
構(gòu)造我們的JavaBean如下(get,set方法省略了):
- public class Person {
- private String person_Id;
-
- private String person_name;
-
- private String person_age;
-
- private String person_address;
- }
構(gòu)造我們的service:
- public class PersonService {
- public List<Person> getAllPerson() {
- List<Person> perList = new ArrayList<Person>();
- perList.add(new Person("101", "小博", "22", "湖北"));
- perList.add(new Person("102", "張三", "21", "湖南"));
- perList.add(new Person("103", "李四", "23", "江蘇"));
- perList.add(new Person("104", "王五", "22", "上海"));
- return perList;
- }
- }
構(gòu)造action:
- public class PersonAction extends ActionSupport {
-
- private List<Person> presonList = null;
-
- private Map<String, String> reportParameter = null;
-
- @Override
- public String execute() throws Exception {
- presonList = new PersonService().getAllPerson();
- reportParameter = new HashMap<String, String>();
- reportParameter.put("year", "2009");
- reportParameter.put("unit_mc", "武漢XX科技有限公司");
- return SUCCESS;
- }
-
- public String htmlView(){
- return SUCCESS;
- }
-
- public List<Person> getPresonList() {
- return presonList;
- }
-
- public void setPresonList(List<Person> presonList) {
- this.presonList = presonList;
- }
-
- public Map<String, String> getReportParameter() {
- return reportParameter;
- }
-
- public void setReportParameter(Map<String, String> reportParameter) {
- this.reportParameter = reportParameter;
- }
- }
struts配置如下:
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.action.extension" value="action" />
-
- <package name="jasperReport"
- extends="struts-default,jasperreports-default">
- <action name="PDF" class="com.mengya.action.PersonAction">
- <result name="success" type="jasper">
- <param name="location">/jasper/preson.jasper</param>
- <param name="dataSource">presonList</param>
- <param name="reportParameters">reportParameter</param>
- <param name="format">PDF</param>
- </result>
- </action>
-
- <action name="XLS" class="com.mengya.action.PersonAction">
- <result name="success" type="jasper">
- <param name="location">/jasper/preson.jasper</param>
- <param name="dataSource">presonList</param>
- <param name="reportParameters">reportParameter</param>
- <param name="format">XLS</param>
- </result>
- </action>
- <action name="XML" class="com.mengya.action.PersonAction">
- <result name="success" type="jasper">
- <param name="location">/jasper/preson.jasper</param>
- <param name="dataSource">presonList</param>
- <param name="reportParameters">reportParameter</param>
- <param name="format">XML</param>
- </result>
- </action>
- <action name="CSV" class="com.mengya.action.PersonAction">
- <result name="success" type="jasper">
- <param name="location">/jasper/preson.jasper</param>
- <param name="dataSource">presonList</param>
- <param name="reportParameters">reportParameter</param>
- <param name="format">CSV</param>
- </result>
- </action>
- <!--
- location:是指我們剛才用iReport編譯生成的jasper文件
- dataSource:是指我們執(zhí)行的數(shù)據(jù)庫(kù)查詢結(jié)果,在testAction類里把這個(gè)結(jié)果查詢出來(lái),這個(gè)參數(shù)必須要有
- format:是指需要輸出的類型,默認(rèn)是PDF,其他的輸出類型有:XML、HTML、XLS、CSV、RTF ,注意這里一定要大寫(xiě)
- reportParameters:jasperreport中的Parameters
- 除了這幾個(gè)參數(shù),還有下列參數(shù):
- delimiter:是指如果輸出類型為CSV的話,指定分割符,默認(rèn)為“,”
- parse:是指是否解析location參數(shù)中的EL表達(dá)式,默認(rèn)為 true
- contentDisposition:指定disposition,默認(rèn)為“inline”,如果設(shè)為“attachment”就是強(qiáng)制下載
- documentName:輸出的文件名
- imageServletUrl:生成圖形的路徑
- -->
- </package>
- </struts>
頁(yè)面調(diào)用:
- <a href="PDF.action">PDF</a>
- <a href="XLS.action">XLS</a>
- <a href="XML.action">XML</a>
- <a href="CSV.action">CSV</a>
如果要想以HTML形式顯示報(bào)表內(nèi)容則還需要在web.xml配置jasperReport自帶的一個(gè)servlet如下:
- <!-- JasperReport包中自帶的Servlet,用來(lái)做為HTML形式顯示報(bào)表的時(shí)候報(bào)表的圖片,要在這里配置上,圖片在jasperReport包中 -->
- <servlet>
- <servlet-name>JasperReportImageServlet</servlet-name>
- <servlet-class>
- net.sf.jasperreports.j2ee.servlets.ImageServlet
- </servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>JasperReportImageServlet</servlet-name>
- <url-pattern>/image</url-pattern>
- </servlet-mapping>
action中不需要修改,只需在struts.xml里添加一個(gè)HTML不配置如下:
- <action name="HTML" class="com.mengya.action.PersonAction">
- <result name="success" type="jasper">
- <param name="location">/jasper/preson.jasper</param>
- <param name="dataSource">presonList</param>
- <param name="reportParameters">reportParameter</param>
- <param name="format">HTML</param>
- <param name="imageServletUrl">
- <![CDATA[/image?image=]]>
- </param>
- </result>
- </action>
imageServletUrl的值就是上面的serlvet的路徑,該servlet就是生成了一個(gè)圖形,如果不配置該serlvet則頁(yè)面上有圖片沒(méi)顯示的樣子。
頁(yè)面調(diào)用如:
- <a href="HTML.action">HTML</a>