JSF + Rich: FileUpload + Param
Вопрос
Я использую <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>