2013-02-05 4 views
2

JBoss AS7, JSF2, MySQL, EJB 및 JPA를 사용하여 회사에 Java EE 애플리케이션을 생성하고 있습니다.JSF보기에서 BLOB 유형 표시

내 데이터베이스에서 검색된 데이터가 포함 된 여러 행이있는 JSF 뷰에 dataTable이 있습니다. 이 데이터에는 이미지, PDF, 텍스트와 같은 모든 파일 형식을 포함 할 수있는 BLOB 열이 있습니다.

새 창에서 파일을 여는 각 행에 링크를 삽입하고 싶습니다.

  1. 어떻게 BLOB 유형을 바이트로 변환 할 수 있습니까?
  2. 어떻게 이런 종류의 작업을 수행 할 수 있습니까?

답변

2

어떻게 BLOB 유형 바이트를 변환 할 수 있습니까?

은 그냥 JPA @Entitybyte[] 재산 @Lob 주석을 넣어.


어떻게 이런 일을 할 수 있습니까?

JSF가 엔티티 ID를 요청 매개 변수로 사용하여 테이블에서 원하는 링크를 생성하도록해야합니다.

<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> 

이어서 (생략 명백히 파라미터 검증 및 예외 처리)를 doGet()에 응답하여 byte[] 스트림 간단한 file servlet를 생성한다.

@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[] 속성을 반환합니다.

+0

감사합니다. BalusC. 나는 또한 당신의 연결을 찾아 냈다 : http://balusc.blogspot.fr/2007/07/fileservlet.html – pims42

+0

당신을 환영한다. 이 링크는 JPA/EJB가 아닌 "일반 JDBC"와 관련이 있습니다. – BalusC

+0

예,하지만 제가 원하는대로 코드를 작성했습니다. – pims42