Как сохранить изображение (mediumblob) в БД с помощью JSF?

У меня есть несколько вопросов, я пытаюсь найти учебник о том, как сохранить изображение в столбец mediumblob в моей базе данных с помощью JSF, PrimeFaces (или, если есть другой способ сделать это) и Managed Bean, я знаю, что делать сделать это без JSF и Managed Bean, но, поскольку я новичок в этом, я остановился на нескольких вещах... Я действительно понятия не имею, как получить изображение с моей страницы JSF, преобразовать в массив байтов и сохранить его. Пожалуйста, кто-нибудь, дайте свет.

Вот что я сделал, извините, но я действительно новичок, поэтому, пожалуйста, помогите мне.

JSF-страница:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">

<h:body>

    <h:form>
        <!-- <p:growl id="growl" showDetail="true" sticky="true" /> -->

        <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />  
        <h:panelGrid columns="3">
            <h:outputText value="ID : "/>
            <h:inputText id="txtId" name="txtId" value="${produtoMB.prodAtual.id}" readonly="true"/>
            <p:message id="a" for="txtId"/>


            <h:outputText value="Foto:"/>
            <p:fileUpload id="txtFoto" name="txtFoto" value="${produtoMB.prodAtual.foto}" />
            <p:message id="i" for="txtFoto" showSummary="true" showDetail="false"/>



            <h:panelGroup>
                <h:commandButton name="cmd" value="Insert" action="${produtoMB.insert()}"/>

            </h:panelGroup>


        </h:panelGrid>

    </h:form>
</h:body>
</html>

Моя сущность

@Entity
public class Produto implements Serializable {

    private static final long serialVersionUID = -8914597399554711634L;
    private long id;
    private Byte[] foto;

    @Id
    @GeneratedValue
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }


    @Lob
    @Column(columnDefinition="mediumblob")
    public Byte[] getFoto() {
        return foto;
    }
    public void setFoto(Byte[] foto) {
        this.foto = foto;
    }



}

Управляемый компонент

@ManagedBean
@SessionScoped
public class ProdutoMB implements Serializable {

    private static final long serialVersionUID = -3304202810037758438L;

    private Produto prodAtual;

    public ProdutoMB() { 
        prodAtual = new Produto();
        prodDAO = new ProdutoDAOImpl();

    }

    public String insert() { 
        try {
            prodDAO.insert( prodAtual );
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "";
    }

}

Благодарю вас!


person migmig    schedule 23.06.2013    source источник
comment
comment
Другими словами, просто прочитайте Руководство пользователя PrimeFaces и примеры снежного покрова. Как только вы получили InputStream или byte[], остальное больше не является проблемой JSF.   -  person BalusC    schedule 23.06.2013


Ответы (1)


byte[] photo недоступно на странице JSF. Используйте UploadedFile в ManagedBean для простых лиц.

<p:fileUpload id="txtFoto" name="txtFoto" value="${produtoMB.file}" />

UploadedFile должен быть свойством управляемого компонента.

@ManagedBean
@SessionScoped
public class ProdutoMB implements Serializable {

private UploadedFile file;

// To save use InputStrem and byte[] from file.

}

Также определите фильтр загрузки файлов в web.xml

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
person Masudul    schedule 23.06.2013