我的客户端代码处理 Canvas 绘图,并使用 JavaScript 生成形状的 blob zip 文件。 我想在服务器端使用 zip。但是,我找不到任何解决方案。
我尝试过使用远程命令,但使用它只能将字符串参数传递给 JSF bean。 我尝试以某种方式破解 primefaces fileUpload 插件,以便我可以将我的 blob 传递给支持 bean,但这也没有成功。
最佳答案
您可以将 blob 从 JavaScript 传递到 JSF bean,方法是将 blob 编码为某种字符串表示形式(例如 Base64),然后将其传递给 Primefaces p:remoteCommand
,然后发送到托管 bean,最后将其解码回字节数组。
程序如下:
将 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/