sql >> データベース >  >> RDS >> Mysql

Hibernateを使用してStruts2のmySqlDBからjspページに画像(bolbタイプ)を表示する方法

    以下を使用して、JPA(Hibernate Backed)からの画像をレンダリングします。例では、struts2-conventions-pluginを使用します。結果のタイプの注釈では、「ストリーム」がビューにすべて存在します。

    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に画像IDを提供し、上記のアクションはDBから画像を取得するために使用します。ギャラリー)。

    私の記憶が正しければ、このギャラリーには、すべての写真を表示するのに必要な数の行を含む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>
    

    上記のこの行は、おそらくこの部分がおそらくあなたが望むものです:

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



    1. WindowsでのMySQLの小文字のテーブル名Unixでの大文字の名前

    2. Oracle 11g Express Edition for Windows 64ビット?

    3. SQLiteで2つの日付の差を計算する方法

    4. MySQL selectでXPATHを使用する方法は?