{"id":21,"date":"2009-11-25T14:32:41","date_gmt":"2009-11-25T13:32:41","guid":{"rendered":"http:\/\/www.pmannel.de\/wordpress\/?p=21"},"modified":"2010-08-29T19:50:19","modified_gmt":"2010-08-29T17:50:19","slug":"ladebalken-mit-spring-mvc-dwr","status":"publish","type":"post","link":"https:\/\/www.pmannel.de\/wordpress\/?p=21","title":{"rendered":"Ladebalken mit Spring MVC &#038; DWR"},"content":{"rendered":"<p>Da es nicht so richtig gute Tutorials zu demThema gibt, hab ich mir aus unterschiedlichen Tutorials was zusammengestrickt:<br \/>\n(Leider wei\u00df ich die Autoren nicht mehr, sonst h\u00e4tte ich sie hier nat\u00fcrlich erw\u00e4hnt!)<\/p>\n<p>Hier der Controller f\u00fcr die Uploadseite:<\/p>\n<pre class=\"brush:java\">\r\npublic class DocumentUploadController\r\n{\r\n\t \r\n\tprivate AjaxMultiPartResolver multiPartResolver;\r\n\t \r\n\t@Override\r\n\tprotected ModelAndView onSubmit(HttpServletRequest request,\r\n\t    HttpServletResponse response, Object command, BindException errors)\r\n\t    throws Exception\r\n\t{\r\n\t \r\n\t    ModelAndView mv = new ModelAndView(new RedirectView(getSuccessView()));\r\n\t \r\n\t        MultipartHttpServletRequest req = multiPartResolver.resolveMultipart(request);\r\n\t        MultipartFile file  = req.getFile(\"file\");\r\n\t \r\n\t        \/\/save file\r\n\t        return mv;\r\n\t}\r\n}\r\n<\/pre>\n<p>Hier der MultiPartResolver:<\/p>\n<pre class=\"brush:java\">\r\npublic class AjaxMultiPartResolver extends CommonsMultipartResolver\r\n{\r\n\tprivate FileUploadListener fileUploadListener;\r\n\r\n\t@Override\r\n\tpublic MultipartHttpServletRequest resolveMultipart(HttpServletRequest request)\r\n\t\t\tthrows MultipartException\r\n\t{\r\n\t\tString encoding \t\t= determineEncoding(request);\r\n\t\tFileUpload fileUpload \t= prepareFileUpload(encoding);\r\n\t\tif (fileUploadListener != null)\r\n\t\t{\r\n\t\t\tfileUpload.setProgressListener(fileUploadListener);\r\n\t\t}\r\n\t\ttry\r\n\t\t{\r\n\t\t\tList fileItems \t\t\t\t\t\t= ((ServletFileUpload) fileUpload).parseRequest(request);\r\n\t\t\tMultipartParsingResult parsingResult \t= parseFileItems(fileItems, encoding);\r\n\r\n\t\t\treturn new DefaultMultipartHttpServletRequest(request, parsingResult.getMultipartFiles(), parsingResult.getMultipartParameters());\r\n\t\t}\r\n\t\tcatch (FileUploadBase.SizeLimitExceededException ex)\r\n\t\t{\r\n\t\t\tthrow new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);\r\n\t\t}\r\n\t\tcatch (FileUploadException ex)\r\n\t\t{\r\n\t\t\tthrow new MultipartException(\"Could not parse multipart servlet request\", ex);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic FileUploadListener getFileUploadListener()\r\n\t{\r\n\t\treturn fileUploadListener;\r\n\t}\r\n\r\n\tpublic void setFileUploadListener(FileUploadListener fileUploadListener)\r\n\t{\r\n\t\tthis.fileUploadListener = fileUploadListener;\r\n\t}\r\n}\r\n<\/pre>\n<p>Hier der FileUploadListener:<\/p>\n<pre class=\"brush:java\">\r\npublic class FileUploadListener implements ProgressListener\r\n{\r\n\r\n\tprivate boolean multipartFinished \t\t= false;\r\n\tprivate UploadInfoBean uploadInfoBean;\r\n\r\n\tprivate static long bytesTransferred \t= 0;\r\n\tprivate static long fileSize \t\t\t= -100;\r\n\tprivate long totalBytesRead \t\t\t= 0;\r\n\r\n\tpublic FileUploadListener()\r\n\t{\r\n\t\tuploadInfoBean = new UploadInfoBean();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void update(long bytesRead, long contentLength, int items)\r\n\t{\r\n\t\ttotalBytesRead \t= bytesRead;\r\n\t\tbytesTransferred \t= bytesRead;\r\n\t\tif (fileSize != contentLength)\r\n\t\t\tfileSize = contentLength;\r\n\r\n\t}\r\n\r\n\tpublic boolean isMultipartFinished()\r\n\t{\r\n\t\treturn multipartFinished;\r\n\t}\r\n\r\n\tpublic void setMultipartFinished(boolean multipartFinished)\r\n\t{\r\n\t\tthis.multipartFinished = multipartFinished;\r\n\t}\r\n\r\n\t\/**\r\n\t * Function is used as Javascript-DWR-Function!\r\n\t * @return\r\n\t *\/\r\n\tpublic UploadInfoBean getStatus()\r\n\t{\r\n\t\tuploadInfoBean.setTotalSize(fileSize\/1024);\r\n\t\tuploadInfoBean.setBytesRead(totalBytesRead\/1024);\r\n\t\tString per = NumberFormat.getPercentInstance().format((double) bytesTransferred \/ (double) fileSize);\r\n\t\tuploadInfoBean.setPercentage(Integer.parseInt(per. substring(0, per.length() - 1)));\r\n\t\treturn uploadInfoBean;\r\n\t}\r\n\r\n}\r\n\r\n<\/pre>\n<p>Hier die JSP, in der die Dateien hochgeladen werden:<\/p>\n<pre class=\"brush:java\">\r\n<%@ page language=\"java\" contentType=\"text\/html;charset=UTF-8\" pageEncoding=\"UTF-8\"%>\r\n<%@ include file=\"\/jsp\/include.jsp\"%>\r\n<script type=\"text\/javascript\" src=\"%3C%=request.getContextPath%28%29%20%%3E\/dwr\/engine.js\"><\/script>\r\n<script type=\"text\/javascript\" src=\"%3C%=request.getContextPath%28%29%20%%3E\/dwr\/util.js\"><\/script>\r\n<script type=\"text\/javascript\" src=\"%3C%=request.getContextPath%28%29%20%%3E\/dwr\/interface\/FileUploadListenerJS.js\"><\/script>\r\n<script type=\"text\/javascript\">\r\nfunction queryStatus(){\r\n\tFileUploadListenerJS.getStatus(showStatus);\r\n\treturn true;\r\n}\r\nfunction overlayWhenFormFilled(){\r\n\r\n\tif($F('file') != '')\r\n\t{\r\n\t\t#pageOverlayShow();\r\n\t\t#positionPageOverlayActionBox();\r\n\t\tsetTimeout('queryStatus()', 100);\r\n\t\treturn true;\r\n\t}\r\nreturn false;\r\n}\r\n\r\nfunction showStatus(status){\r\n\r\n\t\t\/\/document.getElementById(\"progressBarSuccesfull\").style.visibility = 'hidden';\r\n\t\tdocument.getElementById(\"progressBar\").style.display = \"block\";\r\n\t\tdocument.getElementById(\"percentage\").innerHTML= ' ' + status.percentage;\r\n\t\tdocument.getElementById(\"bytesRead\").innerHTML= ' ' + status.bytesRead;\r\n\t\tdocument.getElementById(\"totalSize\").innerHTML= ' ' + status.totalSize;\r\n\t\tdocument.getElementById(\"progressBarBoxContent\").style.width = parseInt(status.percentage * 4) + \"px\";\r\n\t\tsetTimeout(queryStatus, 100);\r\n\r\n \t\treturn true;\r\n}\r\n<\/script>\r\n<form:form method=\"post\" commandname=\"MyCommand\" enctype=\"multipart\/form-data\" id=\"MyCommand\" onsubmit=\"overlayWhenFormFilled();\">\r\n<table>\r\n<tbody><tr>\r\n<td>\r\n<input name=\"file\" id=\"file\" maxlength=\"104857600\" accept=\"text\/*\" type=\"file\"><\/td>\r\n<td>\r\n<input value=\"<spring:message code=\"button.save\"\/>\" type=\"submit\"><\/td>\r\n<\/tr>\r\n<\/tbody><\/table>\r\n<\/form:form>\r\n<div id=\"progressBar\" style=\"display: none;\">\r\n\t<b class=\"round_border\"><b class=\"round_border_layer3\"><\/b><b class=\"round_border_layer2\"><\/b><b class=\"round_border_layer1\"><\/b><\/b>\r\n<div class=\"round_border_content\">\r\n<div id=\"progressBarBox\">\r\n<div id=\"progressBarBoxContent\"><\/div>\r\n<div id=\"progressBarText\">\r\n\t\t\t\t<spring:message code=\"upload.progressartransferlabel\">\r\n\t\t\t\t<span id=\"percentage\"><\/span>\r\n\t\t\t\t<spring:message code=\"upload.progressbarprocentlabel\">\r\n\t\t\t\t<spring:message code=\"upload.progressbartransfersizelabel\">\r\n\t\t\t\t<span id=\"bytesRead\"><\/span>\r\n\t\t\t\t<spring:message code=\"upload.progressbarmetricunitlabel\">\r\n\t\t\t\t<spring:message code=\"upload.progressbarfromlabel\">\r\n\t\t\t\t<span id=\"totalSize\"><\/span>\r\n\t\t\t\t<spring:message code=\"upload.progressbarmetricunitlabel\">\r\n\t\t\t<\/spring:message><\/spring:message><\/spring:message><\/spring:message><\/spring:message><\/spring:message><\/div>\r\n<div id=\"progressBarVirusScan\" style=\"display: none;\"><spring:message code=\"upload.virusscan\"><\/spring:message><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\t<b class=\"round_border\"><b class=\"round_border_layer1\"><\/b><b class=\"round_border_layer2\"><\/b><b class=\"round_border_layer3\"><\/b><\/b>\r\n<\/div>\r\n\r\n<\/pre>\n<p>Hier die Bean, die den Status speichert:<\/p>\n<pre class=\"brush:java\">\r\npublic class UploadInfoBean\r\n{\r\n\tprivate long totalSize = 0;\r\n\tprivate long bytesRead = 0;\r\n\tprivate int percentage = 0;\r\n\r\n\tpublic int getPercentage()\r\n\t{\r\n\t\treturn percentage;\r\n\t}\r\n\tpublic void setPercentage(int percentage)\r\n\t{\r\n\t\tthis.percentage = percentage;\r\n\t}\r\n\r\n\tpublic long getTotalSize()\r\n\t{\r\n\t\treturn totalSize;\r\n\t}\r\n\tpublic void setTotalSize(long totalSize)\r\n\t{\r\n\t\tthis.totalSize = totalSize;\r\n\t}\r\n\tpublic long getBytesRead()\r\n\t{\r\n\t\treturn bytesRead;\r\n\t}\r\n\tpublic void setBytesRead(long bytesRead)\r\n\t{\r\n\t\tthis.bytesRead = bytesRead;\r\n\t}\r\n}\r\n\r\n<\/pre>\n<p>Und hier die Ausz\u00fcge aus der Context.xml<\/p>\n<pre class=\"brush:xml\">\r\n<beans>\r\n\t<!-- Handles Upload, uses commons.fileupload -->\r\n\t<bean id=\"multiPartResolver\" class=\"de.etss.core.mvc.controller.administration.documentmanagement.AjaxMultiPartResolver\">\r\n<property name=\"maxUploadSize\" value=\"104857600\">\r\n<property name=\"maxInMemorySize\" value=\"0\">\r\n<property name=\"fileUploadListener\" ref=\"fileUploadListener\">\r\n\t<\/property> \r\n\r\n\t<bean id=\"fileUploadListener\" class=\"de.xyz.core.mvc.controller.administration.documentmanagement.FileUploadListener\">\r\n\t\t<dwr:remote javascript=\"FileUploadListenerJS\">\r\n\t\t\t<dwr:include method=\"getStatus\">\r\n\t\t<\/dwr:include>\r\n\t<\/dwr:remote>\r\n<\/bean>\r\n\r\n \t<dwr:configuration>\r\n\t\t<dwr:convert type=\"bean\" class=\"de.xyz.core.mvc.controller.administration.documentmanagement.UploadInfoBean\">\r\n \t<\/dwr:convert>\r\n\r\n \t<dwr:controller id=\"dwrController\" debug=\"true\"><\/dwr:controller>\r\n<\/dwr:configuration><\/property><\/property><\/bean><\/beans>\r\n<\/pre>\n<p>Ich hoffe, das reicht, um den Ladebalken nachzubauen\u2026<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Da es nicht so richtig gute Tutorials zu demThema gibt, hab ich mir aus unterschiedlichen Tutorials was zusammengestrickt: (Leider wei\u00df ich die Autoren nicht mehr, sonst h\u00e4tte ich sie hier nat\u00fcrlich erw\u00e4hnt!) Hier der Controller f\u00fcr die Uploadseite: public class DocumentUploadController { private AjaxMultiPartResolver multiPartResolver; @Override protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException&#8230; <\/p>\n<div class=\"read-more\"><a href=\"https:\/\/www.pmannel.de\/wordpress\/?p=21\">Weiterlesen<\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,10],"tags":[21,20,22,70],"class_list":["post-21","post","type-post","status-publish","format-standard","hentry","category-spring","category-spring-mvc","tag-ajax","tag-dwr","tag-fileupload","tag-spring"],"_links":{"self":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=21"}],"version-history":[{"count":9,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":30,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/21\/revisions\/30"}],"wp:attachment":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}