Не съм опитвал да използвам схемата на uri данни с изображения в гоблени - сигурен съм „може“ да работи, но за да извикате просто трябва да включите това във вашия tml:
<t:DBImage image="${entity.BlobImage}" />
и във вашия компонент DBImage ще ви е необходим начин да преобразувате параметъра image
в байтов масив.
Не искам да отделям време, за да създам работещ пример за тази техника, но ще ви преведа как решавам този тип проблем:
Точно както при всяко изобразяване на изображение в рамките на html документ, ТРЯБВА да има две отделни заявки (освен ако не се използва схемата на data uri):
- html на страницата за изобразяване на маркера на изображението (т.е.
http://host/context/app/mypage
)
- данните за изображението (т.е.
http://host/context/app/myimage
)
така че за заявка едно, искате да конструирате URL адреса на изображението и да го поставите в img таг:
<html>
...
<img src="/context/app/myimage/params" />
...
</html>
и request two просто ще върне потока от байтове на данните за изображението.
Нека започнем с второто искане, защото така има повече смисъл.
В tapepry индивидуалната заявка се обработва чрез създаване на клас страница и по избор tml
шаблон. За да обслужвате поток от байтове, имате нужда само от класа на страницата. За да предадете параметри или контекст на страницата, вие използвате контекстни параметри.
package myproject.pages;
public class MyImage
{
public StreamResponse onActivate(String parameter)
{
// retrieve your image using the context parameter(s)
final InputStream imageStream = getImage(parameter);
return new StreamResponse()
{
@Override
public InputStream getStream() throws IOException
{
return imageStream;
}
@Override
String getContentType()
{
return "image/png";
}
@Override
void prepareResponse(Response response)
{}
};
}
}
На този етап можете да поискате/изобразите вашето изображение, като използвате url "http://host/context/app/myimage/parameter". Сега просто трябва да включите това във вашия img таг, т.е. заявка 1.
Така че първо ще трябва да генерирате връзката, което трябва да се направи във вашия клас на страница:
пакет myproject.pages;
public class MyPage
{
@Inject
private PageRenderLinkSource pageLink;
public Link getImageLink()
{
return pageLink.createPageRenderLinkWithContext(MyImage.class, parameter);
}
}
Всичко, което остава, е да използвате тази връзка във вашия tml:
<img src="${imageLink}" />
Очевидно трябва да свържете вашия параметър и извличане.
person
pstanton
schedule
04.11.2012