JSF + rich: fileupload + param - PullRequest
       23

JSF + rich: fileupload + param

1 голос
/ 26 июля 2011

Я использую <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 вспомогательный компонент:

    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.

1 Ответ

2 голосов
/ 26 июля 2011

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

  • Обработчик события "onadd" вызвал операцию добавления файла
  • "onupload", который дает вамвозможность отменить загрузку на стороне клиента
  • «onuploadcomplete», который вызывается после загрузки всех файлов из списка
  • «onuploadcanceled», который вызывается после загрузки, был отменен с помощью управления отменой
  • «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, это на тот случай, если ваш распознаватель EL не поддерживаетвызов метода с параметрами (см. комментарий BalusC) *

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

<a4j:jsFunction name="setImageFormat">
    <f:setPropertyActionListener value="#{imageFormat}" target="#{fileUploadController.imageFormat}"/>
</a4j:jsFunction>
...