2013-06-21 7 views
7

Kiedy tworzę model, chciałbym zapisać obrazy dla modelu. Używam komponentu fileUpload PrimeFaces. Kiedy zapisuję zdjęcia, chcę wiedzieć, do którego modelu odnosi się dany obraz. Właśnie dlatego muszę wysłać id modelu do komponentu bean.Jak wysłać parametr do fileUploadListener w pliku PrimeFacesPobierz

Czy istnieje możliwość wysłania id modelu do 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

można znaleźć rozwiązanie stąd: http: //stackoverflow.com/questions/15911527/jsf-2-uploadedfile-is-null-in-managedbean-using-tomahawk! – biqarboy

Odpowiedz

30

Nie poprzez parametry zapytania. Możesz to zrobić za pomocą atrybutów komponentów.

E.g.

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

z

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

Musisz rzucić 'event.getComponent(). GetAttributes(). Get (" foo ");' jako ciąg lub nie zostanie skompilowany. Tak więc byłoby to: 'String foo = (String) event.getComponent(). GetAttributes(). Get (" foo "); // bar' –

+0

@Steve: naprawiony, dzięki. – BalusC

1

Musiałem przejść kluczowy parametr wraz z przesłanym pliku. Zauważyłem, że fileUploadListener jest wykonywane podczas fazy APPLY_REQUEST_VALUES, więc nie mogłem użyć wyrażenia EL w tagu f:attribute. Próbowałem również znaleźć wartość przy użyciu event.getComponent().findComponent("id"), ale chociaż składnik był obecny, wartość była zerowa. Myślę, że fasola @ViewScoped naprawiłaby brakującą wartość, ale uparcie próbuję zachować moje fasolki na @RequestScoped, dopóki nie mam absolutnie żadnej innej opcji. Ostatecznie musiałem użyć FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id") który dostałam od http://forum.primefaces.org/viewtopic.php?f=3&t=6432

0

błąd w typach:

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

Zamiast zrobić to w ten sposób:

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

Integer foo = (Integer) event.getComponent().getAttributes().get("foo"); 
Powiązane problemy