Java ZK框架:从Servlet将xls加载到ZK Spreadseet中
了解如何使用servlet加载xls,并将此xls设置为电子表格。 我无法将电子表格连接到servlet,因为它总是空的。此外,我无法使用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
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);