3

JBoss AS7、JSF2、MySQL、EJB、および JPA を使用して、会社用の Java EE アプリケーションを作成しています。

データベースから取得したデータを含むいくつかの行を持つ JSF ビューに dataTable があります。このデータには、画像、PDF、テキストなどの任意のファイル タイプを含めることができる BLOB 列があります。

ファイルを新しいウィンドウで開くリンクを各行に配置したいと思います。

  1. BLOB 型をバイトに変換するにはどうすればよいですか?
  2. どうすればこの種の作業を行うことができますか?
4

1 に答える 1

2

BLOB 型をバイトに変換するにはどうすればよいですか?

JPA@Lobのプロパティに注釈を付けるだけです。byte[]@Entity


どうすればこの種の作業を行うことができますか?

エンティティ ID をリクエスト パラメータとして使用して、JSF に必要なリンクをテーブルに生成させる必要があります。

<h:dataTable value="#{bean.entities}" var="entity">
    <h:column>
        <h:outputLink value="#{request.contextPath}/fileservlet?id=#{entity.id}" target="_blank">#{entity.filename}</h:outputLink>
    <h:column>
</h:dataTable>

次に、 を応答にストリーミングする単純なファイル サーブレットを作成します(明らかなパラメーターの検証と例外処理は省略されています)。byte[]doGet()

@WebServlet("/fileservlet")
public class FileServlet extends HttpServlet {

    @EJB
    private EntityService service;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Entity entity = service.find(request.getParameter("id"));
        response.setContentType(entity.getContentType());
        response.setContentLength(entity.getContent().length);
        response.setHeader("Content-Disposition", "inline;filename=\"" + URLEncoder.encode(entity.getFilename(), "UTF-8") + "\"");
        response.getOutputStream().write(entity.getContent());
    }

}

プロパティをgetContent()返し@Lob byte[]ます。

于 2013-02-05T11:26:17.133 に答える