【Stimulsoft Reports Java教程】使用JavaServer Faces執行Web Designer和Web Viewer
阿新 • • 發佈:2018-11-27
本教程介紹了在Java報表工具中使用JavaServer Faces(JSF)執行Web設計器和Web檢視器的基礎知識。例如,開啟Master-Detail報表模板以進行編輯。
首先,我們需要建立動態Web專案。
接下來將Stimulsoft Java Libs新增到專案中。
您還可以轉換為Maven專案並配置pom.xml檔案以使用Maven中的庫。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jsfstimulsoft</groupId> <artifactId>jsfstimulsoft</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.stimulsoft</groupId> <artifactId>stimulsoft-reports-libs</artifactId> <version>2017.1.1</version> </dependency> </dependencies> </project>
然後,我們需要建立web.xml檔案。在這裡,我們配置StimulsoftResource的servlet,檢索內容,如* .js檔案和影象檔案,該StiWebDesignerActionServlet符合Java web designer,在操作StiWebViewerActionServlet符合Java的Web瀏覽器操作,並且還配置了JavaServer Faces的。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>stimulsoft</display-name> <welcome-file-list> <welcome-file>faces/designer.xhtml</welcome-file> </welcome-file-list> <session-config> <session-timeout>60</session-timeout> </session-config> <servlet> <servlet-name>StimulsoftResource</servlet-name> <servlet-class>com.stimulsoft.web.servlet.StiWebResourceServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>StimulsoftResource</servlet-name> <url-pattern>/stimulsoft_web_resource/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>StimulsoftDesignerAction</servlet-name> <servlet-class>com.stimulsoft.webdesigner.servlet.StiWebDesignerActionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>StimulsoftDesignerAction</servlet-name> <url-pattern>/stimulsoft_webdesigner_action</url-pattern> </servlet-mapping> <servlet> <servlet-name>StimulsoftAction</servlet-name> <servlet-class>com.stimulsoft.webviewer.servlet.StiWebViewerActionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>StimulsoftAction</servlet-name> <url-pattern>/stimulsoft_webviewer_action</url-pattern> </servlet-mapping> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <context-param> <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> <context-param> <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> <param-value>resources.application</param-value> </context-param> <listener> <listener-class>com.sun.faces.config.ConfigureListener</listener-class> </listener> </web-app>
在下一步中,我們需要實現StiWebDesignerBean來填充報表資料並儲存/載入報表模板。
public class StiWebDesignerBean { StiWebDesignerOptions options; String designerID = "StimulsoftWebDesigner"; /** * @return the handler */ public StiWebDesigerHandler getHandler() { StiWebDesigerHandler handler = new StiWebDesigerHandler() { public StiReport getEditedReport(HttpServletRequest request) { try { String reportPath = request.getSession().getServletContext().getRealPath("/reports/Master-Detail.mrt"); String xmlPath = request.getSession().getServletContext().getRealPath("/data/Demo.xml"); String xsdPath = request.getSession().getServletContext().getRealPath("/data/Demo.xsd"); StiReport report = StiSerializeManager.deserializeReport(new File(reportPath)); report.getDictionary().getDatabases().add(new StiXmlDatabase("Demo", xsdPath, xmlPath)); report.getCustomFunctions().add(new StiCustomFunction() { public Object invoke(List<Object> args) { return ((String) args.get(0)).substring( ((Long) args.get(1)).intValue(), ((Long) args.get(2)).intValue()); } @SuppressWarnings({ "rawtypes", "unchecked" }) public List<Class> getParametersList() { return new ArrayList<Class>(Arrays.asList(String.class, Long.class, Long.class)); } public String getFunctionName() { return "subStr"; } }); return report; } catch (Exception e) { e.printStackTrace(); } return null; } public void onOpenReportTemplate(StiReport report, HttpServletRequest request) { String xmlPath = request.getSession().getServletContext().getRealPath("/data/Demo.xml"); String xsdPath = request.getSession().getServletContext().getRealPath("/data/Demo.xsd"); report.getDictionary().getDatabases().add(new StiXmlDatabase("Demo", xsdPath, xmlPath)); } public void onNewReportTemplate(StiReport report, HttpServletRequest request) { String xmlPath = request.getSession().getServletContext().getRealPath("/data/Demo.xml"); String xsdPath = request.getSession().getServletContext().getRealPath("/data/Demo.xsd"); report.getDictionary().getDatabases().add(new StiXmlDatabase("Demo", xsdPath, xmlPath)); try { StiXmlTableFildsRequest tables = StiDataColumnsUtil.parceXSDSchema(new FileInputStream(xsdPath)); for (StiXmlTable table : tables.getTables()) { StiDataTableSource tableSource = new StiDataTableSource( "Demo." + table.getName(), table.getName(), table.getName()); tableSource.setColumns(new StiDataColumnsCollection()); for (StiSqlField field : table.getColumns()) { StiDataColumn column = new StiDataColumn( field.getName(), field.getName(), field.getSystemType()); tableSource.getColumns().add(column); } tableSource.setDictionary(report.getDictionary()); report.getDictionary().getDataSources().add(tableSource); } } catch (Exception e) { e.printStackTrace(); } } public void onSaveReportTemplate(StiReport report, String reportName, HttpServletRequest request) { try { String savePath = request.getSession().getServletContext().getRealPath("/save/"); FileOutputStream fos = new FileOutputStream(savePath + reportName); StiSerializeManager.serializeReport(report, fos); fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } }; return handler; } /** * @return the options */ public StiWebDesignerOptions getOptions() { options = new StiWebDesignerOptions(); return options; } /** * @return the designerID */ public String getDesignerID() { return designerID; } }
接下來,我們需要實現StiWebViewerBean。在這裡,我們載入Master-Detail.mrt報告模板檔案並呈現報表。我們還可以配置Web檢視器,例如將背景顏色設定為灰色。
public class StiWebViewerBean {
StiReport report;
StiWebViewerOptions options;
String viewerID = "StimulsoftWebViewer";
StiMailProperties mailProperties;
/**
* @return the report
* @throws StiDeserializationException
* @throws SAXException
* @throws IOException
*/
public StiReport getReport() throws IOException, SAXException, StiDeserializationException {
if (report == null) {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
String reportPath = session.getServletContext().getRealPath("/reports/Master-Detail.mrt");
report = StiSerializeManager.deserializeReport(new File(reportPath));
String xmlPath = session.getServletContext().getRealPath("/data/Demo.xml");
String xsdPath = session.getServletContext().getRealPath("/data/Demo.xsd");
report.getDictionary().getDatabases().add(new StiXmlDatabase("Demo", xsdPath, xmlPath));
report.render();
}
return report;
}
/**
* @param report
* the report to set
*/
public void setReport(StiReport report) {
this.report = report;
}
/**
* @return the options
*/
public StiWebViewerOptions getOptions() {
options = new StiWebViewerOptions();
options.getAppearance().setBackgroundColor(StiColorEnum.Gray.color());
// options.getToolbar().setVisible(false);
return options;
}
/**
* @param options
* the options to set
*/
public void setOptions(StiWebViewerOptions options) {
this.options = options;
}
/**
* @return the viewerID
*/
public String getViewerID() {
return viewerID;
}
/**
* @param viewerID
* the viewerID to set
*/
public void setViewerID(String viewerID) {
this.viewerID = viewerID;
}
/**
* @return the mailProperties
*/
public StiMailProperties getMailProperties() {
mailProperties = new StiMailProperties();
return mailProperties;
}
/**
* @param mailProperties
* the mailProperties to set
*/
public void setMailProperties(StiMailProperties mailProperties) {
this.mailProperties = mailProperties;
}
}
然後,配置faces-config.xml檔案並新增必要的bean。
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
<managed-bean>
<managed-bean-name>webdesignerBean</managed-bean-name>
<managed-bean-class>com.stimulsoft.StiWebDesignerBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>webviewerBean</managed-bean-name>
<managed-bean-class>com.stimulsoft.StiWebViewerBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
在下一步中,我們需要在WebContent資料夾中建立designer.xhtml頁面。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:stiwebdesigner="http://stimulsoft.com/webdesigner">
<head>
</head>
<stiwebdesigner:webdesigner options="#{webdesignerBean.options}"
handler="#{webdesignerBean.handler}" designerID="#{webdesignerBean.designerID}"/>
</html>
我們還需要在WebContent資料夾中建立viewer.xhtml頁面。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:stiwebviewer="http://stimulsoft.com/webviewer">
<head>
</head>
<stiwebviewer:webviewer report="#{webviewerBean.report}" options="#{webviewerBean.options}"
mailProperties="#{webviewerBean.mailProperties}" viewerID="#{webviewerBean.viewerID}"/>
</html>
現在,您可以將專案部署到Tomcat並執行它。
在下面的螢幕截圖中,您可以看到示例程式碼的結果。