簡體   English   中英

p:graphicImage streamContent nullpointer

[英]p:graphicImage streamContent nullpointer

嘗試獲取斑點並使其成為流式內容。 我得到了字節,它們確實被轉換為ByteArrayInputStream,並且返回了StremedContent圖像,但是我一直得到這個:

    SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/ConfigEmployee] threw exception
    java.io.IOException: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
    at org.primefaces.application.resource.StreamedContentHandler.handle(StreamedContentHandler.java:56)
    ... 21 more

第56行具有以下內容: externalContext.setResponseContentType(streamedContent.getContentType());

我需要添加的是,每個Image對象兩次返回流內容。

圖片豆:

public Image(byte[] bytes,String name)
    {
        this.id=new MyDatabase().getLastId("image")+1;
        this.name=name;
        this.byteData=bytes;

        InputStream is=new ByteArrayInputStream(bytes);
        this.image = new DefaultStreamedContent(is,"image/png");

    }
public StreamedContent getImage() 
    {
        return image;
    }

HTML代碼

<div class="dataTable">
            <h:form id="imageList">
                <p:dataTable var="img" value="#{imageView.images}" rowKey="#{img.id}" rows="10" lazy="true" paginator="true">
                    <p:column headerText="Image">
                        <p:graphicImage style="width:80px; height:80px" value="#{img.image}" />
                    </p:column>
                    <p:column width="200" headerText="Name">
                        <h:outputText value="#{img.name}" />
                    </p:column>
                    <p:column width="200" headerText="Edit">
                        <h:commandButton value="Enter" actionListener="#{imageView.convertImage(img)}" action="Image?faces-redirect=true" />
                    </p:column>
                </p:dataTable>


            </h:form>
        </div>

延遲加載

@Override
    public List<Image> load(int first, int pageSize, String sortField, SortOrder sortOrder,
            Map<String, Object> filters)
    {
        db.openDatabase();
        ResultSet rs = db.getImage();

        List<Image> imgList = new ArrayList<Image>();

        try
        {
            if (rs.last())
                this.setRowCount(rs.getRow());

            for (rs.absolute(first); rs.next() && first <= (first + pageSize); first++)
            {
                imgList.add(new Image(rs.getBytes("byteData"), rs.getString("name")));

            }
        }
        catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            db.closeDatabase();
        }
        return imgList;
    }

Primefaces 5.1,JSF 2.2,Tomcat v7.0

bean的作用域是什么,它應該是View或Session作用域,並且您將不得不更改訪問bean的方式。 對於動態創建的圖像,正在發送兩個請求。 呈現HTML的一個,呈現img標簽。 比第二個,基於src屬性觸發。 模型必須保留后續請求中的值。

所有這些都在這里得到了很好的解釋, 顯示帶有p:graphicImage和StreamedContent的數據庫中的動態圖像

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM