【发布时间】:2018-07-10 20:31:34
【问题描述】:
所以我认为这可能与 StreamSource 有关,但我无法完全找到问题所在。本质上,我有一个从 SQL 数据库中检索数据的 Vaadin Grid。 “图像”列保存上传的图像的 BLOB 值(成功方法)。
我想要做的是允许用户单击表格中的按钮并在弹出视图中显示该图像。
我的 ViewExpenses 类:
aGrid.addColumn(reciept -> "Receipt", new ButtonRenderer<>(clickEvent ->{
new ButtonRenderer<>(clickEvent ->{
Window window = new Window();
window.setModal(true);
window.addCloseShortcut(ShortcutAction.KeyCode.ESCAPE, null);
UI.getCurrent().addWindow(window);
Expenses anExpense = aGrid.getSelectionModel().getSelectedItems().stream().findFirst().get();
long anID = anExpense.getId();
System.out.println(anID);
StreamResource.StreamSource streamSource = (StreamResource.StreamSource)aController.getImage(anID);
System.out.println("4");
StreamResource streamResource = new StreamResource(streamSource,"");
Embedded embedded = new Embedded("",streamResource);
System.out.println("5");
Image anImage = new Image("Reciept", streamResource);
window.setContent(anImage);
anImage.setSizeFull();
window.setSizeFull();
})
);
我的后端DbController类获取图片的方法:
public InputStream getImage(long anIndex){
InputStream binaryStream = null;
try{Statement stmt = null;
int intIndex = (int) anIndex;
//connect to database
Class.forName("org.h2.Driver");
Connection conn = DriverManager.
getConnection("jdbc:h2:mem:Users", "sa", "");
System.out.println("Connected database successfully...");
//insert data
System.out.println("Getting expenses from the database...");
stmt = conn.createStatement();
ResultSet resultSet = stmt.executeQuery("SELECT * FROM EXPENSES");
Blob imageBlob = resultSet.getBlob(intIndex);
binaryStream = imageBlob.getBinaryStream(0, imageBlob.length());
}
catch (Exception e){
}
return binaryStream;
}
我一直在为这个问题摸不着头脑,如果有任何帮助,我将不胜感激。
【问题讨论】: