This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch fix/file-upload in repository https://gitbox.apache.org/repos/asf/struts-examples.git
commit ad0de21a2e5b66c9dc340c2e40c51589c004f76a Author: Lukasz Lenart <lukaszlen...@apache.org> AuthorDate: Tue May 13 20:42:24 2025 +0200 Adjusts file upload example to action based upload --- file-upload/pom.xml | 4 +--- .../example/{Upload.java => UploadAction.java} | 26 +++++++++++++--------- file-upload/src/main/resources/struts.xml | 13 +++++++---- .../main/webapp/WEB-INF/{upload.jsp => input.jsp} | 12 ++-------- file-upload/src/main/webapp/WEB-INF/upload.jsp | 13 +++++------ file-upload/src/main/webapp/WEB-INF/web.xml | 8 ++++--- file-upload/src/main/webapp/index.html | 10 --------- sitemesh3/pom.xml | 4 ++++ sitemesh3/src/main/resources/struts.xml | 12 +++++++++- sitemesh3/src/main/webapp/WEB-INF/admin/hello.jsp | 14 ++++++++++++ sitemesh3/src/main/webapp/WEB-INF/admin/index.jsp | 14 ++++++++++++ 11 files changed, 81 insertions(+), 49 deletions(-) diff --git a/file-upload/pom.xml b/file-upload/pom.xml index 679e023..278a676 100644 --- a/file-upload/pom.xml +++ b/file-upload/pom.xml @@ -29,9 +29,7 @@ <webApp> <contextPath>/${project.artifactId}</contextPath> </webApp> - <stopKey>CTRL+C</stopKey> - <stopPort>8999</stopPort> - <scanIntervalSeconds>10</scanIntervalSeconds> + <scan>10</scan> </configuration> </plugin> </plugins> diff --git a/file-upload/src/main/java/org/apache/struts/example/Upload.java b/file-upload/src/main/java/org/apache/struts/example/UploadAction.java similarity index 65% rename from file-upload/src/main/java/org/apache/struts/example/Upload.java rename to file-upload/src/main/java/org/apache/struts/example/UploadAction.java index a647763..7797c2e 100644 --- a/file-upload/src/main/java/org/apache/struts/example/Upload.java +++ b/file-upload/src/main/java/org/apache/struts/example/UploadAction.java @@ -20,13 +20,18 @@ package org.apache.struts.example; import org.apache.struts2.ActionSupport; +import org.apache.struts2.action.UploadedFilesAware; +import org.apache.struts2.dispatcher.multipart.UploadedFile; import java.io.File; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; /** * <code>Allows upload a file</code> */ -public class Upload extends ActionSupport { +public class UploadAction extends ActionSupport implements UploadedFilesAware { private File[] upload; private String[] uploadFileName; @@ -36,27 +41,26 @@ public class Upload extends ActionSupport { return INPUT; } - public File[] getUpload() { - return upload; + public String upload() throws Exception { + return SUCCESS; } - public void setUpload(File[] upload) { - this.upload = upload; + public File[] getUpload() { + return upload; } public String[] getUploadFileName() { return uploadFileName; } - public void setUploadFileName(String[] uploadFileName) { - this.uploadFileName = uploadFileName; - } - public String[] getUploadContentType() { return uploadContentType; } - public void setUploadContentType(String[] uploadContentType) { - this.uploadContentType = uploadContentType; + @Override + public void withUploadedFiles(List<UploadedFile> uploadedFiles) { + upload = uploadedFiles.stream().map(UploadedFile::getContent).toArray(File[]::new); + uploadFileName = uploadedFiles.stream().map(UploadedFile::getName).toArray(String[]::new); + uploadContentType = uploadedFiles.stream().map(UploadedFile::getContentType).toArray(String[]::new); } } diff --git a/file-upload/src/main/resources/struts.xml b/file-upload/src/main/resources/struts.xml index 1008ab6..8e9bf37 100644 --- a/file-upload/src/main/resources/struts.xml +++ b/file-upload/src/main/resources/struts.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC - "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" - "https://struts.apache.org/dtds/struts-2.5.dtd"> + "-//Apache Software Foundation//DTD Struts Configuration 6.0//EN" + "https://struts.apache.org/dtds/struts-6.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <constant name="struts.devMode" value="true"/> @@ -12,11 +12,16 @@ <action name="index"> <result type="redirectAction"> - <param name="actionName">upload</param> + <param name="actionName">input</param> </result> </action> - <action name="upload" class="org.apache.struts.example.Upload"> + <action name="input" class="org.apache.struts.example.UploadAction"> + <result name="input">WEB-INF/input.jsp</result> + </action> + + <action name="upload" class="org.apache.struts.example.UploadAction" method="upload"> + <result>WEB-INF/upload.jsp</result> <result name="input">WEB-INF/upload.jsp</result> </action> diff --git a/file-upload/src/main/webapp/WEB-INF/upload.jsp b/file-upload/src/main/webapp/WEB-INF/input.jsp similarity index 51% copy from file-upload/src/main/webapp/WEB-INF/upload.jsp copy to file-upload/src/main/webapp/WEB-INF/input.jsp index 247293a..02b247b 100644 --- a/file-upload/src/main/webapp/WEB-INF/upload.jsp +++ b/file-upload/src/main/webapp/WEB-INF/input.jsp @@ -2,7 +2,7 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> - <title>File upload</title> + <title>File upload: input</title> </head> <body> @@ -14,15 +14,7 @@ <s:submit/> </s:form> -<s:iterator value="upload" var="u"> - <s:property value="u"/><br/> -</s:iterator> -<s:iterator value="uploadContentType" var="ct"> - <s:property value="ct"/><br/> -</s:iterator> -<s:iterator value="uploadFileName" var="fn"> - <s:property value="fn"/><br/> -</s:iterator> +<s:actionerror/> </body> </html> diff --git a/file-upload/src/main/webapp/WEB-INF/upload.jsp b/file-upload/src/main/webapp/WEB-INF/upload.jsp index 247293a..62cb89c 100644 --- a/file-upload/src/main/webapp/WEB-INF/upload.jsp +++ b/file-upload/src/main/webapp/WEB-INF/upload.jsp @@ -2,17 +2,16 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> - <title>File upload</title> + <title>File upload: result</title> </head> <body> -<s:form action="upload" method="post" enctype="multipart/form-data"> - <s:file name="upload"/> - <s:file name="upload"/> - <s:file name="upload"/> - <s:submit/> -</s:form> +<p> +<s:a action="input">back to input</s:a> +</p> + +<s:actionerror/> <s:iterator value="upload" var="u"> <s:property value="u"/><br/> diff --git a/file-upload/src/main/webapp/WEB-INF/web.xml b/file-upload/src/main/webapp/WEB-INF/web.xml index 81f7594..d8d850c 100644 --- a/file-upload/src/main/webapp/WEB-INF/web.xml +++ b/file-upload/src/main/webapp/WEB-INF/web.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> -<web-app id="struts_blank" version="2.4" - xmlns="http://java.sun.com/xml/ns/j2ee" +<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" + metadata-complete="false" + version="6.0"> + <display-name>Struts Blank</display-name> <filter> diff --git a/file-upload/src/main/webapp/index.html b/file-upload/src/main/webapp/index.html deleted file mode 100644 index 89ec7f1..0000000 --- a/file-upload/src/main/webapp/index.html +++ /dev/null @@ -1,10 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> -<html> -<head> - <META HTTP-EQUIV="Refresh" CONTENT="0;URL=upload.action"> -</head> - -<body> -<p>Loading ...</p> -</body> -</html> diff --git a/sitemesh3/pom.xml b/sitemesh3/pom.xml index 7f31a85..5e55393 100644 --- a/sitemesh3/pom.xml +++ b/sitemesh3/pom.xml @@ -13,6 +13,10 @@ <packaging>war</packaging> + <properties> + <struts2.version>7.0.4-SNAPSHOT</struts2.version> + </properties> + <dependencies> <dependency> <groupId>org.sitemesh</groupId> diff --git a/sitemesh3/src/main/resources/struts.xml b/sitemesh3/src/main/resources/struts.xml index 935d1b8..7048cff 100644 --- a/sitemesh3/src/main/resources/struts.xml +++ b/sitemesh3/src/main/resources/struts.xml @@ -8,7 +8,7 @@ <constant name="struts.action.extension" value=""/> <constant name="struts.custom.i18n.resources" value="DefaultMessages"/> - <package name="default" extends="struts-default"> + <package name="default" extends="struts-default" namespace="/"> <default-action-ref name="index"/> <action name="index"> <result>/WEB-INF/index.jsp</result> @@ -21,4 +21,14 @@ </action> </package> + + <package name="default2" extends="struts-default" namespace="/admin"> + <default-action-ref name="index"/> + <action name="index"> + <result>/WEB-INF/admin/index.jsp</result> + </action> + <action name="hello"> + <result>/WEB-INF/admin/hello.jsp</result> + </action> + </package> </struts> diff --git a/sitemesh3/src/main/webapp/WEB-INF/admin/hello.jsp b/sitemesh3/src/main/webapp/WEB-INF/admin/hello.jsp new file mode 100644 index 0000000..b3e711e --- /dev/null +++ b/sitemesh3/src/main/webapp/WEB-INF/admin/hello.jsp @@ -0,0 +1,14 @@ +<%@ page contentType="text/html; charset=UTF-8" %> +<%@ taglib prefix="s" uri="/struts-tags" %> +<html> +<head> + <title>SiteMesh example: Admin Index</title> +</head> +<body> +<h2>SiteMesh example: Admin Index with Default Decorator</h2> +<s:url var="url" action="hello" namespace="/"> + <s:param name="decorator" value="1"/> +</s:url> +<s:a href="%{url}">Hello</s:a> +</body> +</html> \ No newline at end of file diff --git a/sitemesh3/src/main/webapp/WEB-INF/admin/index.jsp b/sitemesh3/src/main/webapp/WEB-INF/admin/index.jsp new file mode 100644 index 0000000..b3e711e --- /dev/null +++ b/sitemesh3/src/main/webapp/WEB-INF/admin/index.jsp @@ -0,0 +1,14 @@ +<%@ page contentType="text/html; charset=UTF-8" %> +<%@ taglib prefix="s" uri="/struts-tags" %> +<html> +<head> + <title>SiteMesh example: Admin Index</title> +</head> +<body> +<h2>SiteMesh example: Admin Index with Default Decorator</h2> +<s:url var="url" action="hello" namespace="/"> + <s:param name="decorator" value="1"/> +</s:url> +<s:a href="%{url}">Hello</s:a> +</body> +</html> \ No newline at end of file