петно ​​за показване на гоблен с помощта на маркиране

Запазих blob изображение в db, използвайки този компонент, който желая за вграждане на петно ​​от mysql в етикет в гоблен. Намерих това В мрежата. Не разбирам как работи writer.element

Мисля, че нещо подобно трябва да работи

    @SupportsInformalParameters
    public class DBImage {

      @Parameter(required = true)
      private Image image;
      @Inject
      private ComponentResources resources;


      boolean beginRender(MarkupWriter writer,byte[] array){
            writer.element("img", "src", "data:image/png;base64,"+array,);

            resources.renderInformalParameters(writer);

            writer.end();

            return false;
      }
    }

отколкото да извиквате компонента всеки клас на страницата

@Property 
private DBImage image.beginRedner(entity.getBlobImage);

person nkvnkv    schedule 03.11.2012    source източник
comment
wiki.apache.org/tapestry/ връзка към документация   -  person user1516873    schedule 30.09.2015


Отговори (1)


Не съм опитвал да използвам схемата на uri данни с изображения в гоблени - сигурен съм „може“ да работи, но за да извикате просто трябва да включите това във вашия tml:

<t:DBImage image="${entity.BlobImage}" />

и във вашия компонент DBImage ще ви е необходим начин да преобразувате параметъра image в байтов масив.

Не искам да отделям време, за да създам работещ пример за тази техника, но ще ви преведа как решавам този тип проблем:

Точно както при всяко изобразяване на изображение в рамките на html документ, ТРЯБВА да има две отделни заявки (освен ако не се използва схемата на data uri):

  1. html на страницата за изобразяване на маркера на изображението (т.е. http://host/context/app/mypage)
  2. данните за изображението (т.е. 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