Primefaces photoCam组件无法渲染

时间:2012-12-01 15:29:34

标签: java jsf primefaces

我正在使用primefaces photoCam组件,正如我所解释的那样 https://www.primefaces.org/showcase/ui/multimedia/photoCam.xhtml。不幸的是,不像展示我的photoCam示例,我的不渲染。我在Firefox和Chrome上试过它,代码如下:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">

<h:form>  
<h:panelGrid columns="3">  
    <p:photoCam widgetVar="pc" listener="#{photoCamBean.oncapture}" update="photos"/>  

    <p:commandButton type="button" value="Capture" onclick="pc.capture()"/>  

    <p:imageSwitch effect="zoom" id="photos">  
        <ui:repeat value="#{photoCamBean.photos}" var="photo">  
            <p:graphicImage value="/photocam/#{photo}.png" />  
        </ui:repeat>  
    </p:imageSwitch>  
</h:panelGrid>  
</h:form>

</ui:composition>

豆子

@ManagedBean
@ViewScoped
public class PhotoCamBean {  

private List<String> photos = new ArrayList<String>();

private String getRandomImageName() {
            int i = (int) (Math.random() * 10000000);

            return String.valueOf(i);
    }

public List<String> getPhotos() {
    return photos;
}    

public void oncapture(CaptureEvent captureEvent) {
    String photo = getRandomImageName();
    this.photos.add(0,photo);
    byte[] data = captureEvent.getData();

            ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
            String newFileName = servletContext.getRealPath("") + File.separator + "photocam" + File.separator + photo + ".png";

            FileImageOutputStream imageOutput;
            try {
                    imageOutput = new FileImageOutputStream(new File(newFileName));
                    imageOutput.write(data, 0, data.length);
                    imageOutput.close();
            }
    catch(Exception e) {
                    throw new FacesException("Error in writing captured image.");
            }
}

}

主要面孔展示photoCam呈现带有adobe flash确认窗口的画布,但是我没有,我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

在页面的head部分添加元标记可以解决问题,如下所示:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">

<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</h:head>

<h:form>  
<h:panelGrid columns="3">  
<p:photoCam widgetVar="pc" listener="#{photoCamBean.oncapture}" update="photos"/>  

<p:commandButton type="button" value="Capture" onclick="pc.capture()"/>  

<p:imageSwitch effect="zoom" id="photos">  
    <ui:repeat value="#{photoCamBean.photos}" var="photo">  
        <p:graphicImage value="/photocam/#{photo}.png" />  
    </ui:repeat>  
</p:imageSwitch>  
</h:panelGrid>  
</h:form>
</ui:composition>

只需添加元标记,我就可以通过adobe flash确认窗口查看画布。谢谢大家的贡献。