p:从5.3迁移到6.0 Primeface后,graphicImage给出NoSuchMethodError

时间:2016-10-10 11:31:41

标签: primefaces

我在Weblogic11g,JSF2.0,Servlet 2.5上使用Primefaces 6.0。

我的应用程序能够使用Primefaces 5.3渲染动态jpeg图像。一旦我迁移到6.0,我的动态p:graphicImages就会给出与el相关的NoSuchMethodError。

  

PrimeExceptionHandler logException
  javax.el.ValueExpression.getValueReference(Ljavax / EL / ELContext)Ljavax / EL / ValueReference;   java.lang.NoSuchMethodError:   javax.el.ValueExpression.getValueReference(Ljavax / EL / ELContext)Ljavax / EL / ValueReference;     在   org.primefaces.el.ValueExpressionAnalyzer.toValueReference(ValueExpressionAnalyzer.java:91)     在   org.primefaces.el.ValueExpressionAnalyzer.getExpression(ValueExpressionAnalyzer.java:44)     在   org.primefaces.util.DynamicResourceBuilder.build(DynamicResourceBuilder.java:58)     在   org.primefaces.component.graphicimage.GraphicImageRenderer.getImageSrc(GraphicImageRenderer.java:75)     在   org.primefaces.component.graphicimage.GraphicImageRenderer.encodeEnd(GraphicImageRenderer.java:41)     在   javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:884)     在javax.faces.component.UIComponent.encodeAll(UIComponent.java:1681)     在javax.faces.render.Renderer.encodeChildren(Renderer.java:168)at   javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:854)     在   org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:85)     在   org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72)   ë

@ManagedBean(name="filebean")
@RequestScoped


public class FileBean {

private StreamedContent image;

public StreamedContent getImage() {
    try {
        File file = new File("C:/LEAVEMODULEFOLDER/569_q318d09lou9mafbqsdgsqph1ar_cbblogopng.jpg");

        System.out.println(""+file.canRead());
        image = new DefaultStreamedContent(new FileInputStream(file), "image/jpeg");

} catch (Exception e) {
    log.error("Error in ::" + e);
    log.error(Utility.getStackTrace(e));
}



return this.image;
}
}

xhtml代码如下

<p:graphicImage value="#{filebean.image}" />  

1 个答案:

答案 0 :(得分:2)

根据the API,有问题的方法(ValueExpression.getValueReference())仅存在于EL 2.2之后

由于您使用的是Servlet 2.5,因此您最有可能使用EL 2.1(有关详细信息,请参阅this answer)。因此,对于EL 2.2方法,NoSuchMethodError发生。

因此,您似乎唯一的选择是使用PrimeFaces 5.3,升级到EL 2.2 / Servlet 3.0或不再使用p:graphicImage

除此之外,您还可以向PrimeFaces开发人员报告此问题,因为他们似乎根据用户指南支持Servlet 2.5,这可能被视为错误。