1

blob イメージを db に保存しました。このコンポーネントを使用して、mysql から blob を埋め込み、タペストリーにタグ付けしたいと考えています。これはネットで見つけました。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);
4

1 に答える 1

3

タペストリーの画像でdata uri スキームを使用しようとしたことはありません-動作することは確かですが、これを呼び出すには、tml にこれを含めるだけです:

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

また、DBImage コンポーネント内で、imageパラメーターをバイト配列に変換する方法が必要になります。

この手法の実用的な例を作成するのに時間をかけたくありませんが、この種の問題を解決する方法を紹介します。

html ドキュメント内のイメージ レンダリングと同様に、2 つの別個の要求が必要です (data uri スキームを使用しない場合)。

  1. 画像タグをレンダリングするためのページの html (つまりhttp://host/context/app/mypage)
  2. 画像データ(すなわちhttp://host/context/app/myimage

リクエスト 1 では、画像の URL を作成して img タグに入れます。

<html>
...
<img src="/context/app/myimage/params" />
...
</html>

リクエスト 2 は、画像データのバイト ストリームを返すだけです。

2 番目のリクエストから始めましょう。その方が理にかなっているからです。

タペストリーでは、個々の要求は、ページ クラスとオプションで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}" />

明らかに、パラメーターと取得を結び付ける必要があります。

于 2012-11-04T21:26:05.727 に答える