2010-12-30 16 views
0

Verwenden von Java (Seam + JBoss) und viel Mühe beim Aktualisieren einer Datei.Java: Probleme beim Hochladen von Dateien

Ich benutze das Seam fileUpload-Tag und habe den Formularcodierungstyp als "multipart/form-data" festgelegt. Wenn ich eine Datei auswähle und das Formular absende, erhalte ich jedoch eine Ausnahme.

Der Formularcode ist wie folgt:

<h:form id="registration" enctype="multipart/form-data"> 
                   <h:outputText value="#{messages['profile.title']}"/> 
   <fieldset> 
    
    <!-- s:decorate id="usernameDecorate" template="edit.xhtml" --> 
     <ui:define name="label">Name:</ui:define> 
     <h:inputText id="name" value="#{editProfileAction.editProfileFormData.name}" required="true"> 
      <!-- a:support id="onblur" event="onblur" reRender="usernameDecorate"/ --> 
     </h:inputText> 
    <!-- /s:decorate --> 
    
    <!-- s:decorate id="usernameDecorate" template="edit.xhtml" --> 
     <ui:define name="label">Email:</ui:define> 
     <h:inputText id="email" value="#{editProfileAction.editProfileFormData.email}" required="true"> 
      <!--  a:support id="onblur" event="onblur" reRender="usernameDecorate"/--> 
     </h:inputText> 
    <!-- /s:decorate --> 
    
    <ui:define name="label">#{messages['profile.fieldlabel.photo']}</ui:define> 
    
    <s:fileUpload id="file" name="file" 
     data="#{editProfileAction.editProfileFormData.data}" 
     contentType="#{editProfileAction.editProfileFormData.contentType}" 
     fileName="#{editProfileAction.editProfileFormData.filename}" 
     fileSize="#{editProfileAction.editProfileFormData.size}" /> 
    
    
    <div class="buttonBox"> 
     <h:commandButton id="saveButton" value="Save" action="#{editProfileAction.update}"/> 
     &#160; 
     <s:button id="cancel" value="Cancel" view="/home.xhtml"/> 
    </div> 

Die Ausnahme, die ich bin immer wie folgt:

Exception during request processing: 
Caused by java.lang.NullPointerException with message: "" 

org.jboss.seam.web.MultipartRequestImpl.parseRequest(MultipartRequestImpl.java:391) 
org.jboss.seam.web.MultipartRequestImpl.getParameterNames(MultipartRequestImpl.java:530) 
org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:84) 
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) 
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) 
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
+1

Können Sie mehr Stack-Trace oder Klassen erstellen, die editProfileAction darstellt? Es gibt nicht genügend Informationen, um Ihren HTML-Code mit dem Trace Ihres Ausnahme-Stacks in Beziehung zu setzen. – gigadot

+0

Tun Sie, wie Gigadot sagt. Gib uns einen längeren Stacktrace und poste deine Beans. Viel einfacher dann. –

Antwort

0

NullPointerException

Sie über Zeiger lernen sollten.

Irgendwo hast du nicht gesagt Foo foo = new Foo(). Ich wettete ungefähr 3 Zeilen weiter unten im Stack-Trace wird uns sagen, wo. Es sei denn, Sie haben org.jboss.seam.web.MultipartRequestImpl.parseRequest selbst angerufen.

+0

Ich kenne definitiv Zeiger. Ich arbeite mit einer Reihe von Frameworks, die nach meinem Wissen mit all diesen Dingen umgehen sollten. Ich habe ein Upload-Formular definiert, das (vorausgesetzt, mein Verständnis ist richtig - ich bin im Moment mit all dieser Technologie ein bisschen überschwemmt, aber es gibt wenig, was ich tun kann, aber das Formular ausgefüllt wird), füllen Sie ein Modellobjekt und dann Rufen Sie die Update-Methode auf, an der ich mit den Formulardaten herumspielen kann. Nur wenn ich den Kodierungstyp als multipart/form-data spezifiziere, macht es die App nicht so weit. – NRaf

+0

Morgen, wenn ich zur Arbeit komme, versuche ich dir zu helfen. Habe das nie versucht, aber es läuft ein Projekt auf Seam. Mal sehen, ob ich dir helfen kann. – pringlesinn

0

Wir haben hier Richfaces hochladen:

<rich:fileUpload id="fileUpload" 
    progressLabel="Uploading" 
    maxFilesQuantity="10" 
    listHeight="90px" 
    listWidth="400px" 
    addControlLabel="Select" 
    noDuplicate="true" 
    fileUploadListener="#{someJavaHome.uploadFile}" 
    clearAllControlLabel="Clear" 
    uploadControlLabel="Add Files" 
    doneLabel="Done" 
    cancelEntryControlLabel="Cancel" 
    clearControlLabel="Clear" 
    transferErrorLabel="Oops! Upload didn't work out." 
    sizeErrorLabel="Cannot be bigger than 1MB"> 
</rich:fileUpload> 


public void uploadFile(UploadEvent uploadEvent) throws IOException{ 
    try { 
     if(uploadEvent == null){ 
     return; 
     } 

     for (UploadItem uploadItem : uploadEvent.getUploadItems()) { 
     if(!this.uploadItems.contains(uploadItem)){ 
      this.uploadItems.add(uploadItem); 
     } 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
Verwandte Themen