Вопрос

Я использую <rich:fileupload> И мне нужно отправить дополнительные параметры моему контроллеру. Я пытался использовать <f:param> для этого.

Вот представление:

<rich:fileUpload 
    fileUploadListener="#{fileUploadController.listener}"
    maxFilesQuantity="#{fileUploadController.uploadsAvailable}"
    addControlLabel="Hinzufügen"
    uploadControlLabel="Hochladen"
    cancelEntryControlLabel="Abbrechen"
    doneLabel="Fertig"
    clearAllControlLabel="Alle entfernen"
    noDuplicate="true"
    stopControlLabel="Stop"
    clearControlLabel="Entfernen"
    id="upload"                             
    immediateUpload="#{fileUploadController.autoUpload}"  
    ajaxSingle="true"
    acceptedTypes="jpg" 
    allowFlash="#{fileUploadController.useFlash}"
    rerender="info">

    <a4j:support event="onuploadcomplete" reRender="info" status="globalStatus" />

    <f:param 
    value="#{imageFormat}"  
    name="#{fileUploadController.imageFormat}"/>

</rich:fileUpload>

Здесь FileUploadController Блюд Bean:

    private String imageFormat;

    public void setImageFormat(String imageFormat) {
        this.imageFormat = imageFormat;
    }

    public String getImageFormat() {
        return imageFormat;
    }

Однако сеттер никогда не называется, поэтому переменная всегда null. Анкет А #{imageFormat} имеет правильное значение, я проверил это с помощью <h:outputText>.

Я не могу использовать <a4j:param>, потому что нет кнопки, чтобы зацепить.

Мы используем JSF 1.2, а не JSF 2.0.

Это было полезно?

Решение

Чтобы выполнить некоторые операции на определенных этапах загрузки, вы можете прикрепить к событию Rich: FileUpload. Наряду со стандартными событиями, Rich: Fileupload предоставляет ряд конкретных событий:

  • Обработчик событий "Onadd" вызвал операцию добавления файла
  • «OnuPload», которая дает вам возможность отменить загрузку на стороне клиента
  • «Onuploadcomplete», который вызывается после того, как все файлы из списка загружаются
  • «Onuploadcancall», который называется после того, как загрузка была отменена с помощью Cancel Control
  • «Onerror», который вызывается, если загрузка файла была прервана в соответствии с любыми ошибками

Чтобы вызвать логику на стороне сервера, используя AJAX, когда происходит событие, используйте «A4J: Status» или «A4J: JSFUNCTION», например, используя «A4J: Status»:

<rich:fileUpload
        yourParameters="...">
    <a4j:support event="onuploadcomplete" reRender="something" action="#{fileUploadController.setImageFormat(imageFormat)}"/>
</rich:fileUpload>

и с использованием «A4J: JSFUNCTION» (также продемонстрировано, как использовать SetProperTyActionListener, это для случая, если ваш Resolver не поддерживает вызовы метода с параметрами (см. Комментарий Balusc)))

<rich:fileUpload onupload="setImageFormat();"
        yourParameters="..."></rich:fileUpload>

<a4j:jsFunction name="setImageFormat">
    <f:setPropertyActionListener value="#{imageFormat}" target="#{fileUploadController.imageFormat}"/>
</a4j:jsFunction>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top