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

时间:2017-11-15 15:36:02

标签: javascript jsf primefaces

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

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

1 个答案:

答案 0 :(得分:3)

您可以通过将blob编码为某些字符串表示形式将blob从JavaScript传递到JSF bean,例如,传递给 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}]);
            }
    
  2. (用于从blob转换为base64 reffer到此接受的answer

    1. 将p:remoteCommand添加到您的页面

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

      来捕获它
      public void onBlobBase64Sent() {
         String blobBase64 = (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("blobBase64Name");
         byte[]blob=java.util.Base64.getDecoder().decode(blobBase64);
      }