我正在使用一个Web应用程序,其中有一个Java Applet,它将来自wacom设备的图像捕获到RenderedImage
对象中。 applet本身嵌入到JSF 2.0页面中。
我需要将创建的RenderedImage
从Applet传递给JSF支持bean,以便它成为User
对象的一部分。我的支持bean是视图范围。
我真的迷失了。我一直在寻找一个如何实现这一目标的好例子。我应该使用JSObject
,还是应该将图像发送到servlet?
您能就如何解决这个问题提出一些建议吗?
答案 0 :(得分:7)
您的问题可以分为以下几个子步骤:
BufferedImage
创建一个字节数组; <h:commandButton>
的{{1}}; 那就是说,让我们继续实施这个议程。
在你的小程序中,你将有一个方法可以做点(1) - (4)。获得图像后,以通常的方式调用它:
Java Applet方法:
onclick
JSF页面(表单和JavaScript):
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托管bean:
<script>
function writeImageValue(imageValue) {
document.getElementById('image').value = imageValue;//point 3
document.getElementById('image-form:submit').click();//point 4
}
</script>
<h:form id="image-form">
<input type="hidden" id="image" name="image" />
<h:commandButton id="submit" action="#{imageSubmitBean.submitImage}" style="display:none" />
</h:form>