2013-06-21 1 views
7

Когда я создаю модель, я хотел бы сохранить изображения для модели. Я использую компонент PrimeFaces fileUpload. Когда я сохраняю фотографии, я хочу знать, к какому образцу относится конкретное изображение. Вот почему мне нужно отправить идентификатор модели для поддержки bean-компонента.Как отправить параметр fileUploadListener в PrimeFaces fileUpload

Есть ли возможность отправить идентификатор модели для 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

Вы можете найти решение отсюда: HTTP: //stackoverflow.com/questions/15911527/jsf-2-uploadedfile-is-null-in-managedbean-using-tomahawk! – biqarboy

ответ

30

Не по запросу параметры. Вы можете сделать это через атрибуты компонента.

E.g.

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

с

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

Вы должны указать 'event.getComponent(). GetAttributes(). Get (" foo ");' как String или это не будет компилироваться. Таким образом, это будет: 'String foo = (String) event.getComponent(). GetAttributes(). Get (" foo "); // bar' –

+0

@Steve: исправлено, спасибо. – BalusC

1

мне нужно передать ключевой параметр вместе с загруженным файлом. Я обнаружил, что fileUploadListener выполняется во время фазы APPLY_REQUEST_VALUES, поэтому я не мог использовать выражение EL в теге f:attribute. Я также попытался найти значение, используя event.getComponent().findComponent("id"), но хотя компонент присутствовал, значение было нулевым. Я думаю, что @ViewScoped боб бы исправить отсутствующее значение, но я упорно пытаюсь сохранить свои бобы @RequestScoped, пока у меня нет абсолютно никакого другого варианта. В конце концов, я должен был использовать FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"), который я получил от http://forum.primefaces.org/viewtopic.php?f=3&t=6432

0

Ошибки типов:

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

Вместо этого, сделать это таким образом:

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

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