primefaces graphicimage CDI bean不起作用

时间:2016-05-19 19:37:00

标签: primefaces cdi jsf-2.2 managed-bean payara

我有一些问题,显示我的数据库检索到的图像。

查看来电者:

<p:graphicImage value="#{appController.image}" height="200 px" >
      <f:param name="oid" value="#{item.oid}" />
</p:graphicImage>

控制器:

@Named("appController")
@ApplicationScoped
public class AppController {

    @Inject
    private MultimediaFacade multimediaFacade;

    public StreamedContent getImage() throws IOException {
        System.out.println("getting image")
        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 imageId = context.getExternalContext().getRequestParameterMap().get("oid");
            int oid=Integer.parseInt(imageId);
            System.out.println(oid);
            Multimedia image = multimediaFacade.find(oid);
            System.out.println(Arrays.toString(image.getFileBlob()));
            return new DefaultStreamedContent(new ByteArrayInputStream(image.getFileBlob()));
        }
    }
}

此代码没有显示任何内容,看起来永远不会调用该方法(永远不会在控制台中打印)!

经过几天试用改变范围之后,我尝试使用@ManagedBean而不是@Named,它可以工作!!!

有人可以解释我为什么只能使用@ManagedBean而不能使用@Named?

1 个答案:

答案 0 :(得分:1)

检查导入中是否有javax.enterprise.context.ApplicationScoped

如果您对@ApplicationScoped有不同的导入(例如javax.faces.bean.ApplicationScoped),那么您需要配置CDI以发现所有bean而不仅仅是那些带有CDI注释的bean(这是默认值)

要为所有bean启动发现,请将空beans.xml添加到WEB-INF目录中,或者如果您已经有beans.xml,请将bean-discovery-mode="all"添加到<beans>元素中,例如这样:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="annotated">
</beans>