English 中文(简体)
显示数据库或边远来源的动态形象,附页:图表和精度
原标题:Display dynamic image from database or remote source with p:graphicImage and StreamedContent

I m 试图展示在数据库中作为<代码>StreamedContent在<p:graphicImage>所节省的图像 如下:

<p:graphicImage  value="#{item.imageF}" width="50"  id="grpImage" height="80"/>
private StreamedContent content; // getter and setter

public StreamedContent getImageF() {

    if (student.getImage() != null) {
        InputStream is = new ByteArrayInputStream(student.getImage());
        System.out.println("Byte :"+student.getImage());
        content = new DefaultStreamedContent(is, "", student.getStuID());
        System.out.println("ddd ------------------------------- " + content);
        return content;
    }

    return content;
}

这是一种空白形象。 如何造成这种情况,我如何解决这一问题?

印刷如下:

INFO: Byte :[B@a2fb48
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@b0887b
INFO: Byte :[B@a2fb48
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@1d06a92
INFO: Byte :[B@d52f0b
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@39a60
INFO: Byte :[B@d52f0b
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@8c3daa
INFO: Byte :[B@124728a
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@1dbe05b
INFO: Byte :[B@124728a
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@66a266
INFO: Byte :[B@a2fb48
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@1293976
INFO: Byte :[B@a2fb48
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@17b7399
INFO: Byte :[B@d52f0b
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@1e245a5
INFO: Byte :[B@d52f0b
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@4a7153
INFO: Byte :[B@124728a
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@1561bfd
INFO: Byte :[B@124728a
INFO: ddd ------------------------------- org.primefaces.model.DefaultStreamedContent@47a8c2
问题回答

<代码><p:graphicImage> 要求采用一种特殊的回收方法。 也就是说,每生成的图像将两次引用,每次在完全不同的吉大港定居地申请中使用。

第一次吉大港山区开发项目申请要求获得一个共同基金网页的超文本结果,将首次使用该接收器,以便产生“超文本编码”和“超文本编码”;中含有权利独特和自动生成的URL要素,该要素包含有关哪条信条的信息,一旦浏览器要要求图像,就应当加以利用。 请注意,此时此刻,而不是需要归还图像内容。 不会以任何方式使用该软件,因为超文本工程(超文本产出中不使用“斜线”,而是单独要求使用)。

Once the webbrowser retrieves the HTML result as HTTP response, it will parse the HTML source in order to present the result visually to the enduser. Once the webbrowser encounters an <img> element during parsing the HTML source, then it will send a brand new HTTP request on the URL as specified in its src attribute in order to download the content of that image and embed it in the visual presentation. This will invoke the getter method for the second time which in turn should return the actual image content.

your particular case 很明显,为了检索实际图像内容,总理要么无法识别和援引信使,要么 get回预期图像内容。 <代码>#{>>> 标识中的可变名称和通话量表明,你正在使用<代码><ui:repeat>或<h:data 表>。 在申请图像期间,最有可能申请的是背信条灯,数据模型正确保存,而共同基金在右侧的圆顶上也能够援引信使。 如果浏览器实际上要求图像,那么空间论坛认为不存在任何地点,那么这种观点的范围也不会奏效。


为了解决这一问题,你最好要改写这种方法,以便在你通过独特的图像识别符号作为<代码><f:param>,而不是依靠在以后的吉大港山区开发方案要求中可能“放弃”的某些背后特性时,可以按要求加以援引。 完全有理由对没有国家的情况使用单独的适用范围管理过的灯塔。 此外,只有一次而不是多次读到“InputStream。

换言之,never declarationStreamedContent nor any InputStream or Even UploadedFile as a bean property; 更正应只对无国籍者之主(@ApplicationScoped bean 网页浏览器实际要求提供内容

E.g.

<p:dataTable value="#{bean.students}" var="student">
    <p:column>
        <p:graphicImage value="#{studentImages.image}">
            <f:param name="studentId" value="#{student.id}" />
        </p:graphicImage>
    </p:column>
</p:dataTable>

在<代码>StudentImages>StudentImages后遗嘱可照此办理:

@Named // Or @ManagedBean
@ApplicationScoped
public class StudentImages {

    @EJB
    private StudentService service;

    public StreamedContent getImage() throws IOException {
        FacesContext context = FacesContext.getCurrentInstance();

        if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
            // So, we re rendering the HTML. Return a stub StreamedContent so that it will generate right URL.
            return new DefaultStreamedContent();
        }
        else {
            // So, browser is requesting the image. Return a real StreamedContent with the image bytes.
            String studentId = context.getExternalContext().getRequestParameterMap().get("studentId");
            Student student = studentService.find(Long.valueOf(studentId));
            return new DefaultStreamedContent(new ByteArrayInputStream(student.getImage()));
        }
    }

}

请注意,这是一个非常特殊的情况,即考虑到<代码>和t;p:graphicImage>,在固定方法中采用商业逻辑是完全合法的。 根据保险范围开展工作。 在采集器中援引商业逻辑通常为fr,另见。 为什么联谊会多次发出。 不要将这一特殊案件作为其他标准(非特殊)案件的借口。 并请指出,由于这一论点在URL的图像中获胜,你无法利用EL 2.2的传法理论,例如#{studentImages.image(student.id)}。 因此,你确实需要将其通过为<代码><f:param>。


如果您使用<o:graphicImage>, 而可以更深入地加以利用,其应用范围广的采集方法可直接归入服务方法和辅助EL 2.2论点。

因此:

<p:dataTable value="#{bean.students}" var="student">
    <p:column>
        <o:graphicImage value="#{studentImages.getImage(student.id)}" />
    </p:column>
</p:dataTable>

页: 1

@Named // Or @ManagedBean
@ApplicationScoped
public class StudentImages {

    @EJB
    private StudentService service;

    public byte[] getImage(Long studentId) {
        return studentService.find(studentId).getImage();
    }

}

See also . blog on the subject.

Try including a mime category. 在你所举的例子中,你认为这“”。 空白形象可能是因为它不承认溪流为图像档案,因为你把该地变成空洞。 因此,添加一种形象/png或形象/jpg的奇迹,看看这是否奏效:

String mimeType = "image/jpg";
StreamedContent file = new DefaultStreamedContent(bytes, mimeType, filename);  

这里有两种可能性(如果是这样的话,请上下整类)。

1) You re not initializing the image properly 2) Your stream is empty so you re getting nothing

Im 学生。 获取数据首先要确保数据实际完好,并反映形象。 第二,现收现时没有具体说明“image/jpg”或你重新使用的内容类型。

这里有几部碎块的代码,以加以检查。

/**  test  package with  test/test.png  on the path */
@RequestScoped
@ManagedBean(name="imageBean")
public class ImageBean
{
    private DefaultStreamedContent content;

    public StreamedContent getContent()
    {
        if(content == null)
        {
            /* use your database call here */
            BufferedInputStream in = new BufferedInputStream(ImageBean.class.getClassLoader().getResourceAsStream("test/test.png"));
            ByteArrayOutputStream out = new ByteArrayOutputStream();

            int val = -1;
            /* this is a simple test method to double check values from the stream */
            try
            {
                while((val = in.read()) != -1)
                    out.write(val);
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }

            byte[] bytes = out.toByteArray();
            System.out.println("Bytes -> " + bytes.length);
            content = new DefaultStreamedContent(new ByteArrayInputStream(bytes), "image/png", "test.png");
        }

        return content;
    }
}

缩略语......

<html 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.prime.com.tr/ui"
>

    <h:head>

    </h:head>

    <h:body>
        <p:graphicImage value="#{imageBean.content}" />
    </h:body>
</html>

如果该法典发挥作用,那么你会重新建立。 尽管这部法律是:(在生产中使用烟草),但它应当给你一个点,说明问题。 我的猜测是,你可能会在日本宇宙航行局或其他数据库框架内发生一些事情,你在这种框架中重申,要么是空的,要么是错的。 或者,你可能只是一个内容类型的问题。

最后,我还要从神父那里打上数据,以便学生们只能用新阵列,然后使用。 如果你不了解情况,(有些是把物体移出或改变主线),你就不再听从你的流。

类似:

byte[] data = new byte[student.getImage().length]
for(int i = 0; i < data.length; i++)
  data[i] = student.getImage()[i];

因此,贵美人有一份复印件(或Arrays.copy()-whatever漂浮了你的船只)。 我可以大力强调,像这种/冲突类型这样的简单东西通常是什么错误。 .。

BalusC的答案是正确的。

但是,要牢记一点(正如他已经指出的那样)。 最后申请由浏览器提出,以便从建造的<代码><img> tag中获取URL。 这不是在 j的情况下进行的。

因此,如果你试图进入这一阶段的话。 Id (博客或任何理由)

context.getCurrentPhaseId().getName()

这将形成一个<条码>NullPointerException,而你将获得的一些误导性错误信息是:

org.primefaces.application.resource.StreamedContentHandler () - Error in streaming dynamic resource. Error reading  image  on type a.b.SomeBean

我花了相当一段时间来说明问题。





相关问题
what is wrong with this mysql code

$db_user="root"; $db_host="localhost"; $db_password="root"; $db_name = "fayer"; $conn = mysqli_connect($db_host,$db_user,$db_password,$db_name) or die ("couldn t connect to server"); // perform query ...

Users asking for denormalized database

I am in the early stages of developing a database-driven system and the largest part of the system revolves around an inheritance type of relationship. There is a parent entity with about 10 columns ...

Easiest way to deal with sample data in Java web apps?

I m writing a Java web app in my free time to learn more about development. I m using the Stripes framework and eventually intend to use hibernate and MySQL For the moment, whilst creating the pages ...

join across databases with nhibernate

I am trying to join two tables that reside in two different databases. Every time, I try to join I get the following error: An association from the table xxx refers to an unmapped class. If the ...

How can I know if such value exists in database? (ADO.NET)

For example, I have a table, and there is a column named Tags . I want to know if value programming exists in this column. How can I do this in ADO.NET? I did this: OleDbCommand cmd = new ...

Convert date to string upon saving a doctrine record

I m trying to migrate one of my PHP projects to Doctrine. I ve never used it before so there are a few things I don t understand. In my current code, I have a class similar to this: class ...

热门标签