2009-07-05 4 views
0

Ich bin mit einem ernsthaften Problem mit Eis konfrontiert: inputFile-Komponente. Wenn ein Fehler beim Prozess Hochladen (wie: ungültiger Dateiname Fehler, leere Dateiname Fehler, max Größe Fehler übersteigt), i verwenden Eis: Message-Tag diese Fehlermeldungen zu zeigen. Ich verwende ice: panelPopup und zeige die ice: inputFile Komponente darin an. Das Problem ist: wenn ich das Hochladen Popup die Fehlermeldung immer noch erscheint, brauche ich eine Möglichkeit, diese Nachrichten zu löschen.Eingabedatei Komponente Fehlermeldungen

Bitte helfen Sie mir, ist jede Hilfe dankbar ......................... :)

Antwort

1

Ich bin nicht 100% sicher , wenn ich Ihre Frage richtig verstanden habe, jedoch denke ich, dass das sofortige Schlüsselwort, das auf die Handlung angewendet wird, die das Popup auslöst, Ihnen helfen wird.

<ice:commandLink 
    action="#{this.popup}" 
    immediate="true"> 
     <h:outputText value="foo" /> 
</ice:commandLink> 

In regelmäßigem JSF-Lebenszyklus, Aktionsereignisse werden in der Regel nach den Phasenprozessvalidierungen gebrannt. Darüber hinaus werden die Werte von der Benutzeroberfläche zum Modell aktualisiert.

Die sofortige Eigenschaft, die im Grunde jeder JSF-Komponente zur Verfügung steht, die jede Art von Ereignis verursachen kann, umgeht die Validierung und, abhängig vom Ereignistyp, auch die Modellaktualisierungsphase.

alt text http://img43.imageshack.us/img43/3900/jsfimmediatecomponents.png (Geary, Horstmann, 2008. Kernjavaserver Faces - Second Edition Prentice Hall.)

Sie finden weitere Informationen zu diesem Thema finden Sie im Sonnen JSF Tutorial finden: The immediate Attribute

0

Hier sind zwei Dinge das hat für mich funktioniert.

Bind Ihr Eis: Eingabedatei Komponente auf eine Eigenschaft auf dem Backing Bean und manuell die Reset-Methode auf dem Objekt aufrufen, wenn Sie das Popup-Bereich zu schließen.

<ice:inputFile binding="#{Bean.uploadedFile}"/>

class BackingBean { 
    private UICommand uploadedFile; 

    public UICommand getUploadedFile() { return uploadedFile; } 
    public void setUploadedFile(UICommand uploadedFile) { this.uploadedFile = uploadedFile; } 

    public void onClose(ActionEvent event) { 
     ((InputFile) uploadedFile).reset(); 
    } 
} 

-ODER-

eine Action zu Ihrem Eis hinzufügen: Eingabedatei Komponente. Dadurch wird verhindert, dass die InputFile-Komponente dem Kontext eigene Validierungsfehler hinzufügt. Sie können die von Ihnen benötigte Validierung in der actionListener-Methode implementieren und die Validierungsfehler mithilfe eines ice: messages-Tags anzeigen. Ich habe festgestellt, dass dies besser funktioniert als die Validierung von inputFile, da Sie die vollständige Kontrolle über den Text/Stil der Fehlermeldung haben und die Fehlermeldungen automatisch gelöscht werden, wenn das Popup-Fenster verschwindet.

<ice:inputFile actionListener="#{Bean.onFileUpload}"/>

public class BackingBean { 
    public void onFileUpload(ActionEvent event) { 
     FileInfo info = ((InputFile) event.getSource()).getFileInfo(); 
     switch (info.getStatus()) { 
      case FileInfo.SAVED : 
       // handle uploaded file 
      case FileInfo.SIZE_LIMIT_EXCEEDED : 
       // file too big error 
      ... 
     } 
    } 
}