2012-04-26 9 views
3

私は1つの問題、Hibernateを使用してStruts 2のmySql DBからjspページの画像(bolbタイプ)を表示する方法を教えていますか?あなたの意見。事前に感謝します。Hibernateを使用してStruts 2のmySql DBからjspページに画像を表示するには

public byte[] getrepImagechange2(int loginid) { 

    Criteria criteria = null; 
    byte[] repCurrentImage = null; 

    try { 
     session = sessionFactory.openSession(); 
     criteria = session.createCriteria(Membersdetails.class).add(Expression.eq("logintable.loginId", loginid)); 
     List list = criteria.list(); 
     Iterator itr = list.iterator(); 
     if (itr.hasNext()) { 

      Membersdetails get = (Membersdetails) itr.next(); 
      repCurrentImage = get.getRepPicture(); 

      HttpServletResponse response23 = ServletActionContext.getResponse(); 
      response23.setContentType("image/jpg"); 
      OutputStream out = response23.getOutputStream(); 
      out.write(repCurrentImage); 
      out.close(); 

     } 
    } catch (Exception e) { 
     System.out.println("Exception in getrepImage() :" + e); 
    } finally { 
     try { 

      session.flush(); 
      session.close(); 
     } catch (Exception e) { 
      System.out.println("Exception in getrepImage resource closing :" + e); 
     } 
    } 
    return repCurrentImage; 
} 
    And I am displaying this image in jsp page in a table cell using this code :      
    <img src="<s:property value="bs"/>" 

答えて

1

IはJPA(Hibernateのバックアップ)の例から画像をレンダリングするために、次を使用し、結果の型注釈で、Struts2の-規則-プラグインを使用して、「ストリーム」すべてのビューに存在している。

package com.kenmcwilliams.photogallery.action.gallery; 

import com.kenmcwilliams.photogallery.orm.Picture; 
import com.kenmcwilliams.photogallery.orm.PictureDetails; 
import com.kenmcwilliams.photogallery.service.Gallery; 
import com.opensymphony.xwork2.ActionSupport; 
import java.io.ByteArrayInputStream; 
import java.io.InputStream; 
import org.apache.struts2.convention.annotation.Result; 
import org.springframework.beans.factory.annotation.Autowired; 

@Result(type = "stream", params = { 
    "contentType", "${contentType}", 
    "contentLength", "${contentLength}", 
    "contentDisposition", "${contentDisposition}", 
    "inputStream", "${inputName}", 
    "bufferSize", "${bufferSize}", 
    "allowCaching", "${allowCaching}" 
}) 
public class Stream extends ActionSupport { 
    @Autowired private Gallery gallery; 
    private String contentType = "text/plain"; 
    private int contentLength = 0; 
    private String contentDisposition = "inline"; 
    private InputStream inputStream; 
    public String inputName = "inputStream";//This should not be required 
    private Integer bufferSize = 1024; 
    private String allowCaching = "true"; 
    private Integer id = null; 

    @Override 
    public String execute() { 
     if (id != null){ 
      //gallery.get 
      PictureDetails details = gallery.getPictureDetails(id); 
      Picture photo = details.getPictureId(); 
      this.contentType = details.getContentType(); 
      System.out.println("Content Type: " + contentType); 
      ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(photo.getPicture()); 
      this.contentLength = photo.getPicture().length; 
      System.out.println("Content Length: " + contentLength); 
      this.inputStream = byteArrayInputStream; 
     }else{ 
      return ERROR; 
     } 
     return SUCCESS; 
    } 

    /** 
    * @return the contentType 
    */ 
    public String getContentType() { 
     return contentType; 
    } 

    /** 
    * @param contentType the contentType to set 
    */ 
    public void setContentType(String contentType) { 
     this.contentType = contentType; 
    } 

    /** 
    * @return the contentLength 
    */ 
    public int getContentLength() { 
     return contentLength; 
    } 

    /** 
    * @param contentLength the contentLength to set 
    */ 
    public void setContentLength(int contentLength) { 
     this.contentLength = contentLength; 
    } 

    /** 
    * @return the contentDisposition 
    */ 
    public String getContentDisposition() { 
     return contentDisposition; 
    } 

    /** 
    * @param contentDisposition the contentDisposition to set 
    */ 
    public void setContentDisposition(String contentDisposition) { 
     this.contentDisposition = contentDisposition; 
    } 

    /** 
    * @return the bufferSize 
    */ 
    public int getBufferSize() { 
     return bufferSize; 
    } 

    /** 
    * @return the allowCaching 
    */ 
    public String getAllowCaching() { 
     return allowCaching; 
    } 

    /** 
    * @param allowCaching the allowCaching to set 
    */ 
    public void setAllowCaching(String allowCaching) { 
     this.allowCaching = allowCaching; 
    } 

    /** 
    * @return the inputStream 
    */ 
    public InputStream getInputStream() { 
     return inputStream; 
    } 

    /** 
    * @param inputStream the inputStream to set 
    */ 
    public void setInputStream(InputStream inputStream) { 
     this.inputStream = inputStream; 
    } 

    /** 
    * @return the id 
    */ 
    public int getId() { 
     return id; 
    } 

    /** 
    * @param id the id to set 
    */ 
    public void setId(int id) { 
     this.id = id; 
    } 
} 

上記の表示方法についても尋ねましたが、以下は画像のギャラリーを表示するために使用されるJSPです(アクションはこのJSPに上記のアクションがDBから画像を取得するために使用する画像IDを提供しますギャラリーのタイトル)。

私が正しく覚えていれば、このギャラリーは、すべての写真を表示するのに必要な数の行を含む4つの画像を表示します。この行の上で

<%@taglib prefix="s" uri="/struts-tags"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <h1><s:property value="photoGallery.name"/></h1> 
     <table> 
      <s:iterator begin="0" end="pictureDetails.size/4" var="row"> 
       <tr> 
        <s:subset source="pictureDetails" start="4 * #row" count="4"> 
         <s:iterator> 
          <s:url forceAddSchemeHostAndPort="true" namespace="/gallery" action="stream" var="streamURL"> 
           <s:param name="id" value="id"/> 
          </s:url> 
          <td> 
           <s:a value="%{#streamURL}"><img width="200px" src="<s:property value="#streamURL"/>"/></s:a> 
          </td> 
         </s:iterator> 
        </s:subset> 
       </tr> 
      </s:iterator> 
     </table> 
    </body> 
</html> 

おそらくこの部分は何をしたい、おそらくです:あなたのANSのため

<img width="200px" src="<s:property value="#streamURL"/>"/> 
+0

thksが、私はannotaionを使用していない私がすることができません.but、私は単純に画像を記憶していますJSPページを表示します。 –

+0

私はHibernateで動作しませんが、自分のAction内にイメージがあるImputStreamを持っている場合、あなたのページにイメージを表示する方法を表示できます。 –

+0

私はアクションクラスで上記のコードを使用しており、jspでimgタグを使用して目的を表示しています –

関連する問題