javascript - 如何将 javascript 创建的 blob 传递给 JSF bean

标签 javascript jsf primefaces

我的客户端代码处理 Canvas 绘图,并使用 JavaScript 生成形状的 blob zip 文件。 我想在服务器端使用 zip。但是,我找不到任何解决方案。

我尝试过使用远程命令,但使用它只能将字符串参数传递给 JSF bean。 我尝试以某种方式破解 primefaces fileUpload 插件,以便我可以将我的 blob 传递给支持 bean,但这也没有成功。

最佳答案

您可以将 blob 从 JavaScript 传递到 JSF bean,方法是将 blob 编码为某种字符串表示形式(例如 Base64),然后将其传递给 Primefaces p:remoteCommand,然后发送到托管 bean,最后将其解码回字节数组。

程序如下:

  1. 将 blob 转换为 Base64

     function prepareAndSendBlobToManagedBean(){
                //zipped file as blob
                var blob=...;
                ///convert blob to Base64 string
                var blobBase64String=convertToBase64(blob);
                sendBlobBase64([{name : 'blobBase64Name', value : blobBase64String}]);
            }
    

(用于从 blob 转换为 base64,引用此接受的 answer )

  • 将 p:remoteCommand 添加到您的页面

    <p:remoteCommand name="sendBlobBase64" 
                     actionListener="#{yourBean.onBlobBase64Sent}" process="@this"/>
    
  • 在名为 yourBean 的托管 bean 中,您可以使用以下命令捕获它

    public void onBlobBase64Sent() {
       String blobBase64 = (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("blobBase64Name");
       byte[]blob=java.util.Base64.getDecoder().decode(blobBase64);
    }
    
  • 关于javascript - 如何将 javascript 创建的 blob 传递给 JSF bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47311429/

    相关文章:

    javascript - 输入值在 Angular 中没有改变

    javascript - 页面重新加载后如何显示消息或警报?

    java - JSF 应用程序平均负载上升

    jsf - 如何退出流?

    javascript - chrome.tabs.query 如何显示所有选项卡的信息?

    javascript - auth' 未从 React 应用程序中的 'firebase' 导出

    java - 核心jsf中outputPanel的等效组件

    html - InputText PrimeFaces 未应用最大长度

    jsf - PrimeFaces 主题未正确应用于标准 JSF 控件

    jsf - 覆盖 PrimeFaces 的 MediaRenderer