2013-06-21 21 views
7

Quando creo un modello, desidero salvare le immagini per un modello. Sto usando il componente fileUpload di PrimeFaces. Quando salgo le immagini voglio sapere a quale modello si riferisce l'immagine particolare. Ecco perché devo inviare l'id di un modello al bean di supporto.Come inviare parametri a fileUploadListener in PrimeFaces fileUpload

C'è la possibilità di inviare id del modello per fileUploadListener?

<h:form enctype="multipart/form-data"> 
    <p:panelGrid columns="2"> 
    <h:outputLabel for="hotelName" value="#{msg.hotelName}"/> 
    <p:inputText value="#{apartmentNew.name}" id="hotelName"/> 
    <h:outputLabel for="hotelDescription" value="#{msg.hotelDescription}"/> 
    <p:inputText value="#{apartmentNew.description}" id="hotelDescription"/> 
    <h:outputLabel for="hotelImages" value="#{msg.hotelImages}"/> 
    <h:form enctype="multipart/form-data"> 
     <p:fileUpload id="hotelImages" 
        fileUploadListener="#{apartments.handleImageUpload}" 
        mode="advanced" 
        sizeLimit="10000000" 
        allowTypes="/(\.|\/)(gif|jpe?g|png)$/"> 
     </p:fileUpload> 
    </h:form> 
    </p:panelGrid> 
    <p:commandButton id="saveApartmentButton" value="#{msg.save}" action="save"/> 
    <p:commandButton id="cancelCreationApartmentButton" value="#{msg.cancel}" 
    action="cancel"/> 
</h:form> 
+0

È possibile trovare la soluzione da qui: http: //stackoverflow.com/questions/15911527/jsf-2-uploadedfile-is-null-in-managedbean-using-tomahawk! – biqarboy

risposta

30

non tramite parametri di richiesta. Puoi farlo tramite gli attributi dei componenti.

E.g.

<p:fileUpload ...> 
    <f:attribute name="foo" value="bar" /> 
</p:fileUpload> 

con

String foo = (String) event.getComponent().getAttributes().get("foo"); // bar 
+0

Devi eseguire il cast di 'event.getComponent(). GetAttributes(). Get (" foo ");' come stringa o questo non verrà compilato. Quindi sarebbe: 'String foo = (String) event.getComponent(). GetAttributes(). Get (" foo "); // bar' –

+0

@Steve: risolto, grazie. – BalusC

1

avevo bisogno di passare un parametro chiave insieme al file caricato. Ho trovato che fileUploadListener viene eseguito durante la fase APPLY_REQUEST_VALUES, quindi non è stato possibile utilizzare un'espressione EL nel tag f:attribute. Ho anche provato a trovare il valore usando event.getComponent().findComponent("id"), ma sebbene il componente fosse presente, il valore era nullo. Penso che un bean @ViewScoped aggiusterà il valore mancante, ma cerco ostinatamente di mantenere i miei bean a @RequestScoped finché non avrò assolutamente altre opzioni. In ultima analisi, ho dovuto usare FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id") che ho ricevuto da http://forum.primefaces.org/viewtopic.php?f=3&t=6432

0

Errore nei tipi:

String foo = event.getComponent().getAttributes().get("foo"); 

Invece, fare in questo modo:

Object foo = event.getComponent().getAttributes().get("foo"); 

Integer foo = (Integer) event.getComponent().getAttributes().get("foo");