Я только начал работать с Wicket самостоятельно, но я просто смонтировал ресурс как общий ресурс со своим собственным URL-адресом. Вы просто переопределить init()
в вашем Application
и зарегистрировать ресурс с
getSharedResources().add(resourceKey, dynamicImageResource);
Затем вы установите его в качестве общего ресурса с
mountSharedResource(path, resourceKey);
По какой-то причине, что я до сих пор не полностью понять, у вас есть для добавления имени класса приложения к ключу ресурса, который вы передаете, mountSharedResource()
.
Давайте добавим полностью рабочий пример для некоторых бонусных голосов! Сначала создайте пустой шаблон Wicket с
mvn archetype:create -DarchetypeGroupId=org.apache.wicket \
-DarchetypeArtifactId=wicket-archetype-quickstart \
-DarchetypeVersion=1.4.0 -DgroupId=com.mycompany \
-DartifactId=myproject
Затем переопределить метод init()
в WicketApplication
, добавив:
@Override
protected void init() {
final String resourceKey = "DYN_IMG_KEY";
final String queryParm = "id";
getSharedResources().add(resourceKey, new Resource() {
@Override
public IResourceStream getResourceStream() {
final String query = getParameters().getString(queryParm);
// generate an image containing the query argument
final BufferedImage img = new BufferedImage(100, 100,
BufferedImage.TYPE_INT_RGB);
final Graphics2D g2 = img.createGraphics();
g2.setColor(Color.WHITE);
g2.drawString(query, img.getWidth()/2, img.getHeight()/2);
// return the image as a PNG stream
return new AbstractResourceStreamWriter() {
public String getContentType() {
return "image/png";
}
public void write(OutputStream output) {
try { ImageIO.write(img, "png", output); }
catch (IOException ex) { /* never swallow exceptions! */ }
}
};
}
});
mountSharedResource("/resource", Application.class.getName() + "/" +
resourceKey);
}
Маленький динамический PNG ресурс просто записывает параметр запроса на черном фоне. Конечно, вы можете получить доступ к своей БД или делать все, что хотите, для получения данных изображения.
И наконец, выполните mvn jetty:run
, и вы сможете получить доступ к ресурсу по адресу this URL.
И в дополнение к этому: использование IInitializer, реализующего класс и 'getSharedResources(). PutClassAlias (ListInitializer.class,« list »); новый ListInitializer(). init (this); 'вы должны иметь возможность обойти добавление всего пути к классам для URL-адреса изображения. – Tim
Можете ли вы предоставить дополнительную информацию, Тим? Я не могу найти класс ListInitializer в Wicket, и доступная документация на 'putClassAlias' тоже не помогает. – janko
ListInitializer - это только моя реализация. Я расширю свой пример в собственном ответе. – Tim