p:imageCropper仅在FireFox上导致“java.io.CharConversionException:无效的URI字符编码”

时间:2015-06-01 12:42:30

标签: jsf firefox primefaces glassfish crop

我有以下图片裁剪器:

<h:form>
    <p:imageCropper id="imageDialog" 
                    value="#{petForm.croppedImage}" 
                    image="#{petForm.uploadedFilename}" 
                    maxSize="#{petForm.width},#{petForm.height}" 
                    minSize="#{petForm.width},#{petForm.height}" />
</h:form>

Chrome和Opera中的一切都运行良好。但是,当我使用FireFox时,我的GlassFish 4.0服务器上出现以下异常:

java.io.CharConversionException: Invalid URI character encoding
    at org.glassfish.grizzly.http.util.HttpRequestURIDecoder.decode(HttpRequestURIDecoder.java:163)
    at org.glassfish.grizzly.http.util.RequestURIRef.getDecodedRequestURIBC(RequestURIRef.java:133)
    at org.glassfish.grizzly.http.util.RequestURIRef.getDecodedRequestURIBC(RequestURIRef.java:114)
    at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:493)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:353)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:1)

我已经解决了。到目前为止,在我的问题中提供的信息中看不到原因。我使用反斜杠\作为图像URI,基本上如下所示:

<p:imageCropper value="\resources\image.jpg" />

Chrome和Opera似乎默默地将反斜杠\切换为斜杠/并获取正确的资源。 FireFox没有这样做,并且在下载图像时仍然使用反斜杠。

在我更改了如下图像URI后,一切正常。

<p:imageCropper value="/resources/image.jpg" />