Search code examples
jsfparameter-passingomnifacesgraphicimage

Using f:param inside o:graphicImage


The following used to work with p:graphicImage but not with o:graphicImage.

Problem: data_id is always null.

xhtml:

<p:dataScroller var="data"...
  <p:graphicImage  value="#{bean.imagel}" >
      <f:param name="data_id" value="#{data._id}" />
  </p:graphicImage>

Bean:

public InputStream getImage(){

    String dataId = FacesContext.getCurrentInstance()
            .getExternalContext()
            .getRequestParameterMap()
            .get("data_id");

I also tried with o:param with the same result. What am I missing?


Solution

  • The <f:param> inside <p:graphicImage> is a PrimeFaces-specific trick to get the StreamedContent thing to work "as expected".

    The <o:graphicImage> doesn't support it (neither does standard <h:graphicImage>). Just pass it as EL method argument the usual way. It ends up in more clean code.

    <o:graphicImage value="#{bean.getImage(data.id)}" />
    

    public InputStream getImage(Long dataId) {
        // ...
    }
    

    See also code examples in documentation.