繁体   English   中英

JSF Primefaces将参数传递给fileupload

[英]JSF Primefaces pass parameter to fileupload

JSF 2.2-Primefaces 4.0-JBoss Wildfly

嗨,我正在尝试将参数值传递给文件上传处理程序。 我尝试了一些发现的建议,但无法使其正常工作。

我退了几步

我需要控制器中的#{fileUploadController.newItemId}

转到文件更新页面时,即使用此URL /fileUpload.jsf?newItemId=10

我尝试了如何在PrimeFaces fileUpload中将参数发送到fileUploadListener并将参数 值通过PrimeFaces文件上传传递到支持bean中提到的内容

fileUpload.xhtml

 <f:metadata>
                <f:viewParam name="newItemId"
                    value="#{fileUploadController.newItemId}" />
                <f:viewAction action="#{fileUploadController.loadData()}" />
            </f:metadata>
            <h:form id="item" enctype="multipart/form-data">
                <p:messages id="messages" />

                <p:panelGrid styleClass="panelGridCenter">
                    <p:row>
                        <p:column>
                            <p:fileUpload
                                fileUploadListener="#{fileUploadController.handleFileUpload}"
                                validator="#{fileUploadController.validateFile}" mode="advanced"
                                dragDropSupport="false" update="messages" sizeLimit="1000000"
                                fileLimit="100" allowTypes="/(\.|\/)(gif|jpe?g|png)$/">

                            </p:fileUpload>
                        </p:column>
                    </p:row>
                </p:panelGrid>

            </h:form>

FileUploadController.java

public void handleFileUpload(FileUploadEvent event) {
        try {

            // Need item id here :) 

            UploadedFile file = event.getFile();
            InputStream inputStream = file.getInputstream();
            FileOutputStream outputStream = new FileOutputStream(file.getFileName());
            byte[] buffer = new byte[4096];
            int bytesRead = 0;
            while (true) {
                bytesRead = inputStream.read(buffer);
                if (bytesRead > 0) {
                    outputStream.write(buffer, 0, bytesRead);
                } else {
                    break;
                }
            }
            outputStream.close();
            inputStream.close();
            Long imageId = serviceSLSB.saveImage(itemId, file, buffer);
            FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded and saved with id." + imageId);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        } catch (Exception e) {
            String errorMessage = getRootErrorMessage(e);
            FacesMessage m = new FacesMessage(FacesMessage.SEVERITY_ERROR, errorMessage, "Saving unsuccessful");
            facesContext.addMessage(null, m);
        } 
    }

public void loadData() {
    if (newItemId == null) {
        String message = "Bad request. Please use a link from within the system.";
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message, null));
        return;
    } else {
        String message = "Your are adding images to item with id : " + newItemId;
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, message, null));
        return;
    }
}

我刚发现我的控制器在更改为

@ViewScoped @Named公共类FileUploadController实现可序列化

我的原因仍然是商品ID,现在可以向该商品添加图片了。

谢谢你们的评论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM