これをこの質問にコメントとして投稿するつもりでしたが、十分な担当者がいないため、新しい質問をする以外に方法がありませんでした(少し冗長に思えますが)。
とにかく、私はskuntselが書いた解決策を試しましたが、逆に: 画像をエンコードし、Bean から JavaScript メソッドに送信しました (icefaces を使用しているので、このように呼び出しましたJavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), functionCall)
)。アプレットでエンコードされた文字列を問題なく取得できますが、デコードしようとしても何も起こらず、それに続くコードに到達できません。
何か不足していますか?前もって感謝します!
編集:これが私が使用しているコードです。
Bean 内: (ボタンのクリックによってトリガーされるメソッド)
BufferedImage originalImage = acquireImage();
byte[] imageInByte = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write( originalImage, "png", baos );
baos.flush();
imageInByte = baos.toByteArray();
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
String imageAsString = Base64.encodeBase64String(imageInByte);
JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), functionCall);
Javascript の場合:
function getEncodedImage(image){
var applet = document.getElementById("Applet");
applet.decodeImage(image);
}
アプレットで:
public void decodeImage(String image) {
System.out.println(image); //works
byte[] imageByteArray = Base64.decodeBase64(image);
System.out.println("something"); //doesn't print anything
InputStream is = new ByteArrayInputStream(imageByteArray);
try {
BufferedImage img = ImageIO.read(is);
ImageIO.write(img, "png", new File("D:/image.png"));
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}