2016-09-11 1 views
0

Ich bin Anfänger in Struts2. Ich versuche, Datei in Struts 2 mit Struts2 Jquery-Plugin hochzuladen. Ich möchte nicht, dass die Seite beim Hochladen der Datei aktualisiert wird. Ich glaube, dass Struts 2 jquery hilft, eine ajax-Aktion zu erstellen, ohne die Seite zu aktualisieren, aber trotzdem wird die Seite aktualisiert. Wenn ich falsch liege, bitte helfen Sie mich zu korrigieren oder schlagen Sie eine alternative Methode zum Hochladen der Datei vor. Unten ist das mein aktuelles Programm:Struts 2 Jquery Datei-Upload

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
    <%@ taglib prefix="sj" uri="/struts-jquery-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>File Upload</title> 
<script type="text/javascript" src="jquery-1.12.3.js"></script> 
</head> 
<body> 
<form action="upload" method="post" enctype="multipart/form-data"> 
     <label for="myFile">Upload your file</label> 
     <input type="file" name="myFile" /> 
     <sj:submit value="Submit Form" targets="myAjaxTarget"/> 
    </form> 
<div id="myAjaxTarget"> 
    </div> 
</body> 
</html> 

struts.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
    <constant name="struts.devMode" value="true" /> 
    <constant name="struts.multipart.maxSize" value="1000000" /> 

    <package name="default" extends="struts-default"> 
    <action name="upload" class="com.upload.FileUpload"> 
     <result name="success">index.jsp</result> 
     <!-- <result name="error">/error.jsp</result> --> 
    </action> 
    </package> 
</struts> 

Fileupload-Aktion

package com.upload; 

import java.io.File; 
import java.io.IOException; 

import org.apache.commons.io.FileUtils; 

import com.opensymphony.xwork2.ActionSupport; 

public class FileUpload extends ActionSupport { 
    private File myFile; 
    private String myFileContentType; 
    private String myFileFileName; 
    private String destPath; 

    public String execute() { 
     /* Copy file to a safe location */ 
     destPath = "C:/apache-tomcat-6.0.33/work/"; 

     try { 
      System.out.println("Src File name: " + myFile); 
      System.out.println("Dst File name: " + myFileFileName); 

      File destFile = new File(destPath, myFileFileName); 
      FileUtils.copyFile(myFile, destFile); 

     } catch (IOException e) { 
      e.printStackTrace(); 
      return ERROR; 
     } 

     return SUCCESS; 
    } 

    public File getMyFile() { 
     return myFile; 
    } 

    public void setMyFile(File myFile) { 
     this.myFile = myFile; 
    } 

    public String getMyFileContentType() { 
     return myFileContentType; 
    } 

    public void setMyFileContentType(String myFileContentType) { 
     this.myFileContentType = myFileContentType; 
    } 

    public String getMyFileFileName() { 
     return myFileFileName; 
    } 

    public void setMyFileFileName(String myFileFileName) { 
     this.myFileFileName = myFileFileName; 
    } 
} 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <display-name>Struts 2</display-name> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <filter> 
     <filter-name>struts2</filter-name> 
     <filter-class> 
     org.apache.struts2.dispatcher.FilterDispatcher 
     </filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>struts2</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

Der Fehler, die ich in Browsern Konsole bekommen ist:

Uncaught TypeError: Cannot read property 'bind' of undefined upload:23 

das ist, wo dieser Fehler landet:

Error

Antwort

1

In Ihrem JSP-Code haben Sie vergessen, das <sj:head> -Tag hinzuzufügen. Und Sie müssen jQuery nicht selbst hinzufügen, <sj:head> wird dafür sorgen.

Hier sind weitere Beispiele für das Projekt für die allgemeine Nutzung: link

Ich glaube, Struts 2 jquery hilft, ohne die Seite zu aktualisieren eine Ajax-Anfrage zum Handeln zu schaffen [...]

Ich denke nicht. Der Datei-Upload ist ein Spezialfall, der momentan in diesem Plugin nicht behandelt wird. Ich habe vor ein paar Wochen auf eine ähnliche Frage geantwortet, vielleicht schaue ich sie mir für eine andere example an.

+0

Ich habe nicht die ganze Frage gelesen, aber die fehlende '' ist wahrscheinlich der Schuldige für alles passiert ist. +1 –

+0

Ich fügte hinzu und konnte sehen, dass es alle js-Dateien selbst hinzufügte. Kann eine Methode vorschlagen, mit der ich den ajax-Datei-Upload in Struts 2 implementieren kann, weil ich nicht möchte, dass die Seite aktualisiert wird. – Pragya

+0

Hey @ Pragya, in der anderen [Frage] (https://stackoverflow.com/questions/39207207/how-to-retrieve-uploaded-file-using-ajax-on-java-server-side/39221365#39221365) Es gibt ein ganzes Beispiel für einen asynchronen Datei-Upload (auch ohne das struts2-jquery-Plugin). Es gibt alles, was Sie brauchen, von Action bis js, – beendr