3

我正在完全按照 https://www.primefaces.org/showcase/ui/multimedia/photoCam.xhtml中的说明使用 primefaces photoCam 组件。不幸的是,与展示我的 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.");
            }
}

}

primefaces 展示 photoCam 使用 adobe flash 确认窗口渲染画布,但我的没有,我在这里缺少什么?

4

1 回答 1

1

在页面的 head 部分添加 meta 标签可以解决问题,如图所示:

<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 确认窗口查看画布。谢谢大家的贡献。

于 2013-01-02T04:25:36.457 回答