Java ZK框架:从Servlet将xls加载到ZK Spreadseet中

Java ZK框架:从Servlet将xls加载到ZK Spreadseet中,java,zk,Java,Zk,了解如何使用servlet加载xls,并将此xls设置为电子表格。 我无法将电子表格连接到servlet,因为它总是空的。此外,我无法使用 EventComposer loadFileServlet=(EventComposer)SpringUtil.getBean(“EventComposer”) 不知何故,我需要在servlet中获取一个电子表格,并将xls传递给它 或者简单地说:如何从servlet中的Composer(jsp)获取Speradseet 我有一个jsp文件: <htm

了解如何使用servlet加载xls,并将此xls设置为电子表格。 我无法将电子表格连接到servlet,因为它总是空的。此外,我无法使用

EventComposer loadFileServlet=(EventComposer)SpringUtil.getBean(“EventComposer”)

不知何故,我需要在servlet中获取一个电子表格,并将xls传递给它

或者简单地说:如何从servlet中的Composer(jsp)获取Speradseet

我有一个jsp文件:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>zk</title>
        <zssjsp:head/>
    </head>
    <body>
    <div width="100%" style="height: 100%;">
        <zssjsp:spreadsheet id="ss" src="/WEB-INF/books/hide.xlsx" apply="org.autto.zk.EventComposer"
                            width="100%" height="100%" maxVisibleRows="200" maxVisibleColumns="40"
                            showToolbar="true" showFormulabar="true" showContextMenu="true" showSheetbar="true"/>
    </div>
    </body>
</html>
pom.xml

<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>org.zkoss.zss</groupId>
    <artifactId>home</artifactId>
    <version>3.9.5-Eval</version>
    <properties>
        <commons-io>1.3.1</commons-io>
        <maven.build.timestamp.format>yyyy-MM-dd</maven.build.timestamp.format>
        <packname>-${project.version}-FL-${maven.build.timestamp}</packname>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <packaging>war</packaging>
    <name>The zssjsp demo Project</name>
    <description>The zssjspdemo Project</description>
    <licenses>
        <license>
            <name>GNU LESSER GENERAL PUBLIC LICENSE, Version 3</name>
            <url>http://www.gnu.org/licenses/lgpl.html</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <repositories>
        <repository>
            <id>ZK CE</id>
            <name>ZK CE Repository</name>
            <url>http://mavensync.zkoss.org/maven2</url>
        </repository>
        <repository>
            <id>ZK EVAL</id>
            <name>ZK Evaluation Repository</name>
            <url>http://mavensync.zkoss.org/eval</url>
        </repository>
        <repository>  
            <id>prime-repo</id>  
            <name>PrimeFaces Maven Repository</name>  
            <url>http://repository.primefaces.org</url>  
            <layout>default</layout>  
        </repository>  
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>zkmaven</id>
            <name>ZK Maven Plugin Repository</name>
            <url>http://mavensync.zkoss.org/maven2/</url>
        </pluginRepository>
    </pluginRepositories>
    <dependencies>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io}</version>
        </dependency>
        <dependency>
            <groupId>org.zkoss.zss</groupId>
            <artifactId>zssex</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.zkoss.zss</groupId>
            <artifactId>zssjsp</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.11.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.11.RELEASE</version>
        </dependency>
        <!-- Jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.6</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.5</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.15</version>
        </dependency>
        <!-- https://search.maven.org/remotecontent?filepath=org/apache/httpcomponents/httpclient/4.5.9/httpclient-4.5.9.jar -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.9</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>25.0.0.redhat-1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.1.7.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.1.7.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.2.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.7.RELEASE</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>

    </dependencies>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- Run with Jetty -->
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.10</version>
                <configuration>
                    <scanIntervalSeconds>5</scanIntervalSeconds>
                    <stopKey>foo</stopKey>
                    <stopPort>9999</stopPort>
                    <contextPath>/</contextPath>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

  • 添加到作曲家中

    public void doAfterCompose(Component comp) throws Exception {
    super.doAfterCompose(comp);
    String  s = (String)((HttpServletRequest)Executions.getCurrent().getNativeRequest()).getAttribute("string");
    if (s != null) {
        showBook(s);
    }
    
    }

    }

  • 我已经尝试了通过请求部分的两种变体 在这两种情况下,我都有一本书,或者字符串路径。 电子表格也可用,但未更新。为什么?

    如果我添加@Listen(“onStopEditing=#ss”),则从另一个角度看 对于showBook方法,并传递路径字符串、编辑exl和prees enter,电子表格将更新

    UPD 2:
    问题是,当加载ss时,它的id为8418(例如) 当我发送请求并调用doAfterCompose时,id是8452。 当我再次编辑单元格和触发器onCellSelection id 8418时。 并且有不同的会议

    当servlet将请求重定向到index.jsp/zul时,我会在调用doAfterCompose时创建新的对象ss,但仍然有旧的活动ss。我怎样才能避免这种情况

    它失败的原因 ZK composer位于ZK创建的特定“桌面”范围内,该范围比会话短,但比请求长。每次使用ZK组件加载(或重新加载)页面时,服务器都会创建一个新组件和一个新的composer,并将页面上的组件连接到composer中,然后该组件将javascript小部件呈现到浏览器中。呈现的javascript小部件和java组件形成一对。当您与小部件交互时,它会向服务器发出AJAX请求,而不是重新加载整个页面。 ​ ZK有自己的流程来控制作曲家的生命周期,您自己创建的作曲家(如new EventComposer())与ZK framework创建的作曲家不同

    我推荐三种方法:

    包括ZUL方法 因为zul提供了更丰富的功能,所以您可以在zul中使用FileUpload组件实现上传功能。因此,在同一页面中的2个zk组件(FileUpload和电子表格)之间更容易通信。然后,您只需要在类似jsp的jsp菜单示例中包含zul。 有关如何实现上载,请参阅《开发人员参考》中的文件上载

    通过请求 您可以通过当前的servlet方式实现上传。 1.将图书对象(由导入器生成)存储为
    HttpServletRequest
    属性。 2.使用电子表格将请求转发(保持请求不变)到JSP 3.在您的
    Composer.doAfterCompose()中获取该书
    
    ((HttpServletRequest)执行.getCurrent().getNativeRequest()).getAttribute()

    另一种方式是: 1.直接将xls文件存储在特定文件夹中 2.将文件名作为查询字符串传递 3.使用电子表格将请求转发到JSP 4.获取查询字符串(文件名为HttpServletRequest.getParameter() 5.导入文件

    检查哪一个简单但显示了想法

    @Wire
    在Servlet中不起作用
    @Wire
    是一个ZK注释,它只在ZK
    选择器或composer

    中起作用。谢谢你的想法,我已经添加到了post UPD中,结果是。很快:尝试了两个带有pass-via请求的想法,在composer中有o book或带有路径的字符串,但电子表格没有更新。不知道为什么。另外,我从最开始就尝试了Zul方法开始时,它工作正常,但我需要使用Http POSTAlso发送.xls,并尝试从执行中获取Spreadhseet.getCurrent().getDesktop().getComponents(),但结果相同-speadssheet未更新。还尝试了,1.将jsp更改为zul。2.将电子表格放入窗口,3.将窗口添加到composer,最后一步添加了window.appendChild(ss);但结果相同-ss未更新。问题是加载ss时,其id为8418(示例)当我发送请求并调用doAfterCompose时,id为8452。当我再次编辑cell和Trigger onCellSelection id时,id为8418。因此我有不同的ss。当servlet将请求重定向到index.jsp/zu时,我会在调用doAfterCompose时创建新的对象ss。我如何避免这种情况?我已经向您的repo iOrkazakov/zssjsjspsdemo.Pl发送了一个pull请求轻松合并它并访问form.jsp,上传一个文件,它应该正确地显示在ZSS中。谢谢,这个解决方案工作得很好。但在这种情况下,我正在寻找另一个行为:因为它是另一个应用程序的一部分,ss应该在post请求后用xls文件更新。没有任何其他表单。所以我应该使用post请求发送.xls(例如使用postman)和ss应该加载这个.xls.form.jsp只是测试
    LoadFileServlet
    的一种方法。如果我们能够使
    LoadFileServlet
    Composer
    正确工作。那么,POST请求来自哪里(表单或其他应用程序)无关紧要。我只是向您展示了如何将servlet与ZSS连接,您可以在此基础上继续开发。谢谢。我知道它应该可以工作,但有趣的是,为什么当我发送带有文件的帖子时,我的电子表格不会加载它。
    <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>org.zkoss.zss</groupId>
        <artifactId>home</artifactId>
        <version>3.9.5-Eval</version>
        <properties>
            <commons-io>1.3.1</commons-io>
            <maven.build.timestamp.format>yyyy-MM-dd</maven.build.timestamp.format>
            <packname>-${project.version}-FL-${maven.build.timestamp}</packname>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
        <packaging>war</packaging>
        <name>The zssjsp demo Project</name>
        <description>The zssjspdemo Project</description>
        <licenses>
            <license>
                <name>GNU LESSER GENERAL PUBLIC LICENSE, Version 3</name>
                <url>http://www.gnu.org/licenses/lgpl.html</url>
                <distribution>repo</distribution>
            </license>
        </licenses>
        <repositories>
            <repository>
                <id>ZK CE</id>
                <name>ZK CE Repository</name>
                <url>http://mavensync.zkoss.org/maven2</url>
            </repository>
            <repository>
                <id>ZK EVAL</id>
                <name>ZK Evaluation Repository</name>
                <url>http://mavensync.zkoss.org/eval</url>
            </repository>
            <repository>  
                <id>prime-repo</id>  
                <name>PrimeFaces Maven Repository</name>  
                <url>http://repository.primefaces.org</url>  
                <layout>default</layout>  
            </repository>  
        </repositories>
        <pluginRepositories>
            <pluginRepository>
                <id>zkmaven</id>
                <name>ZK Maven Plugin Repository</name>
                <url>http://mavensync.zkoss.org/maven2/</url>
            </pluginRepository>
        </pluginRepositories>
        <dependencies>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io}</version>
            </dependency>
            <dependency>
                <groupId>org.zkoss.zss</groupId>
                <artifactId>zssex</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.zkoss.zss</groupId>
                <artifactId>zssjsp</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.1.7.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.3.11.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>4.3.11.RELEASE</version>
            </dependency>
            <!-- Jackson -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.9.6</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.7</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.9.5</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.15</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.15</version>
            </dependency>
            <!-- https://search.maven.org/remotecontent?filepath=org/apache/httpcomponents/httpclient/4.5.9/httpclient-4.5.9.jar -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.9</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.8.6</version>
            </dependency>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>25.0.0.redhat-1</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>4.1.7.RELEASE</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>4.1.7.RELEASE</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.1.2.RELEASE</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>4.1.7.RELEASE</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>4.1.7.RELEASE</version>
            </dependency>
    
        </dependencies>
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <!-- Run with Jetty -->
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <version>6.1.10</version>
                    <configuration>
                        <scanIntervalSeconds>5</scanIntervalSeconds>
                        <stopKey>foo</stopKey>
                        <stopPort>9999</stopPort>
                        <contextPath>/</contextPath>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
    
        private void processShowBook(FileItem item, HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {
        request.setAttribute("string", getPathString(item));
        request.getRequestDispatcher("/index.jsp").forward(request,response);
    }
    
    public void doAfterCompose(Component comp) throws Exception {
    super.doAfterCompose(comp);
    String  s = (String)((HttpServletRequest)Executions.getCurrent().getNativeRequest()).getAttribute("string");
    if (s != null) {
        showBook(s);
    }
    
    public void showBook(String s) throws IOException {
    Path path = Paths.get(s);
    File file = path.toFile();
    
    Importer importer = Importers.getImporter();
    Book book = importer.imports(getStreamData(file), "hide");
    ss.setBook(book);