我正在制作一个项目,在其中用户点击产品时打开一个带有产品名称的模式窗口。我还希望将产品图像包含在面板内的模态窗口中。图像存储在我的服务器上的一个目录中。Wicket从文件系统创建图像
我指的是这个链接
我的面板的HTML代码看起来像这样http://wicketinaction.com/2011/07/wicket-1-5-mounting-resources/
ItemOrderPanel.html
<div>
<li><a wicket:id="link"></a></li>
</div>
ItemOrderPanel.java
final ResourceReference imageResourceReference = new ImageResourceReference();
String imageName = itm.getProductImage();
final PageParameters parameters = new PageParameters();
parameters.set("name", imageName);
CharSequence urlForImage = getRequestCycle().urlFor(imageResourceReference,parameters);
ExternalLink link = new ExternalLink("link", urlForImage.toString());
link.setBody(Model.of(imageName));
add(link);
在WicketApplication.java
mountResource("/orderPage/{name}",new ImageResourceReference());
我对WicketApplication.java中的这一行有疑问。这样
ImageResourceReference.java
我创建资源文件
public class ImageResourceReference extends ResourceReference{
public ImageResourceReference(){
super(ImageResourceReference.class,"imagesDemo");
}
@Override
public IResource getResource() {
return new ImageResource();
}
private static class ImageResource extends DynamicImageResource{
private static final long serialVersionUID = 1L;
@Override
protected byte[] getImageData(Attributes attributes) {
PageParameters parameters = attributes.getParameters();
StringValue name = parameters.get("name");
byte[] imageBytes = null;
if(name.isEmpty() == false)
imageBytes = getImageAsBytes(name.toString());
return imageBytes;
}
private byte[] getImageAsBytes(String label){
BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) image.getGraphics();
g.setColor(Color.BLACK);
g.setBackground(Color.WHITE);
g.clearRect(0, 0, image.getWidth(), image.getHeight());
//g.setFont(new Font("SansSerif", Font.PLAIN, 48));
g.drawString(label, 50, 50);
g.dispose();
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = writers.next();
if (writer == null) {
throw new RuntimeException("JPG not supported?!");
}
final ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] imageBytes = null;
try {
ImageOutputStream imageOut = ImageIO.createImageOutputStream(out);
writer.setOutput(imageOut);
writer.write(image);
imageOut.close();
imageBytes = out.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return imageBytes;
}
@Override
public boolean equals(Object that){
return that instanceof ImageResource;
}
}
}
但是,当我调试,我发现了代码,控制不来的内部ImageResource类这是返回字节。
我想在我的面板上显示图片图片。而我的面板上显示的链接是我存储在本地系统的数据库中的链接。
任何帮助和建议表示赞赏!提前致谢。
我知道可用的,这是一个挑剔和我令人难以置信的抱歉,但你不需要在你的复制方法的try/catch,因为它抛出'IOException'无论如何,很好的答案,但绝对帮助我! – themanatuf
是的,你写了感谢buddy –
@CodeFish但你在哪里把路径?我没有看到..你有没有没有ImageResourceReference如上面的问题所示?只是“添加(..”语句在面板或什么?感谢您的答案 – ZelelB