Java 如何将图像从Applet传递到JSF支持bean

Java 如何将图像从Applet传递到JSF支持bean,java,jsf,jsf-2,applet,bufferedimage,Java,Jsf,Jsf 2,Applet,Bufferedimage,我正在使用一个web应用程序,其中有一个Java小程序,可以将wacom设备中的图像捕获到renderImage对象中。小程序本身嵌入到JSF2.0页面中 我需要将创建的renderimage从Applet传递到JSF支持bean,以便它成为User对象的一部分。我的支持bean是视图范围的 我真的很迷茫。我一直在寻找一个如何实现这一目标的好例子。我应该使用JSObject,还是应该向servlet发送图像 您能就如何解决此问题提供一些建议吗?您的问题可分为以下子步骤: 从存放数据的缓冲区图像创

我正在使用一个web应用程序,其中有一个Java小程序,可以将wacom设备中的图像捕获到
renderImage
对象中。小程序本身嵌入到JSF2.0页面中

我需要将创建的
renderimage
从Applet传递到JSF支持bean,以便它成为
User
对象的一部分。我的支持bean是视图范围的

我真的很迷茫。我一直在寻找一个如何实现这一目标的好例子。我应该使用
JSObject
,还是应该向servlet发送图像


您能就如何解决此问题提供一些建议吗?

您的问题可分为以下子步骤:

  • 从存放数据的
    缓冲区图像
    创建字节数组
  • 对数据进行正确编码,以使其在作为字符串发送到服务器时不会被损坏/修改,例如使用
  • 通过Applet-to-JavaScript通信将数据保存为隐藏表单字段
  • 向服务器发送POST请求,例如触发
    onclick
  • 以标准JSF方式将编码字符串写入JavaBean属性
  • 解码该字符串以获得表示该图像的字节数组
  • 从字节数组重新创建映像,并将其注入视图范围的bean中
  • 话虽如此,让我们继续执行该议程

    在小程序中,您将有一个执行第(1)-(4)点的方法。在获得图像后,按常规方式调用:

    Java小程序方法:

    public void processImage() throws IOException, JSException {
        BufferedImage image = createBufferedImage();//the way you get the image
        /* point 1 */
        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        ImageIO.write(image, "png", bs);
        bs.flush();
        byte[] imageByteArray = bs.toByteArray();
        bs.close();
        /* point 1 */
        String imageAsString = Base64.encodeBase64String(imageByteArray);//point 2
        /* points 3-4 */
        JSObject window = JSObject.getWindow(this);
        window.call("writeImageValue", new Object[] {imageAsString});
        /* points 3-4 */
    }
    
    JSF页面(表单和JavaScript):

    
    函数writeImageValue(imageValue){
    document.getElementById('image')。value=imageValue;//第3点
    document.getElementById('image-form:submit')。单击();//第4点
    }
    
    JSF托管bean:

    @ManagedBean
    @RequestScoped
    public class ImageSubmitBean {
    
        @ManagedProperty("#{param.image}")//point 5
        private String imageAsString;//getter+setter
        @ManagedProperty("#{userBean}")//your view scoped bean
        private UserBean userBean;//getter+setter
    
        public String submitImage() throws IOException {
            byte[] imageByteArray = Base64.decodeBase64(imageAsString);//point 6
            /* point 7 */
            InputStream is = new ByteArrayInputStream(imageByteArray);
            BufferedImage image = ImageIO.read(is);
            is.close();
            userBean.setUserImage(image);//update your view scoped bean
            /* point 7 */
            return null;
        }
    
    }
    

    你成功地使解决方案起作用了吗?@AndrewThompson谢谢!有趣的是,在发布一个问题后,OPs有时似乎完全失去了对它的兴趣,根本没有提供任何反馈。尽管如此,在stackoverflow上冲浪在这个话题上几乎没有任何结果,所以我认为有一个小型案例来解决这个问题会很好:)谢谢!!!!!!!!直到今天,我将测试您的解决方案,我的wacom dll:\失败,我无法从pad加载图像,原因未知,dll加载失败,直到今天,我解决了这个问题,再次感谢。非常感谢先生。你帮了我很大的忙