我正在使用<rich:fileupload>
,我需要向Controller发送一些额外的参数。我尝试使用<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;
}
但是,永远不会调用setter,因此变量始终为null
。 #{imageFormat}
具有正确的值,我使用<h:outputText>
进行了验证。
我无法使用<a4j:param>
,因为没有可以挂钩的按钮。
我们使用的是JSF 1.2,而不是JSF 2.0。
答案 0 :(得分:2)
要在上传的特定阶段执行某些操作,您可以附加到rich:fileUpload的事件。除标准事件外,rich:fileUpload还提供了许多特定事件:
要在事件发生时使用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>