【Stimulsoft Reports Java教程】使用JavaServer Faces运行Web Designer和Web Viewer

发布时间 : 2018-11-21 10:57:02.000|阅读 402 次

概述:本教程介绍了在Java报表工具中使用JavaServer Faces(JSF)运行Web设计器和Web查看器的基础知识。

相关链接:

下载Stimulsoft Reports Java最新版本

本教程介绍了在Java报表工具中使用JavaServer Faces(JSF)运行Web设计器和Web查看器的基础知识。例如,打开Master-Detail报表模板以进行编辑。

首先,我们需要创建动态Web项目。

Stimulsoft

接下来将Stimulsoft Java Libs添加到项目中。

Stimulsoft

您还可以转换为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并运行它。

Stimulsoft

在下面的屏幕截图中,您可以看到示例代码的结果。

Stimulsoft

Stimulsoft

下载示例

购买Stimulsoft正版授权,请点击“咨询在线客服”哟!


在线
客服
微信
QQ 电话
023-68661681
返回
顶部