Primefaces' textEditor图片太大

时间:2018-02-15 12:47:46

标签: spring jsf primefaces jetty-9

spring 4.3.6,jsf 2.2.14,primefaces 6.1,jetty 9.4.4。

当我从Primefaces'发送太大的图片时textEditor到Jetty服务器,从Jetty收到的日志中有[WARNING]:org.eclipse.jetty.http.BadMessageException:400:无法解析表单内容。如何通知客户端用户该问题?

以下是我的5次尝试,我是如何尝试解决的:

1)我尝试在view.xhtml中添加验证:

<p:textEditor id="questionEditor" value="#{manageQuestionsMB.text}" width="950" height="300" style="margin-bottom:10px">
    <f:validateLength maximum="10" />
</p:textEditor>
<p:commandButton value="Save" actionListener="#{manageQuestionsMB.save()}" style="margin-top:10px;" />

如果textEditor仅包含字符,但没有图片,则上述验证有效。 (textEditor将图片表示为<img src="data:image/jpeg;base64, ... >)。

2)我试图添加验证器:

<p:textEditor id="questionEditor" validator="#{manageQuestionsMB.validate()}" value="#{manageQuestionsMB.text}" width="950" height="300" style="margin-bottom:10px">
</p:textEditor>

如果是大图片,没有validate(),则不会调用save()方法。只是Jetty在日志中的警告。

3)我尝试将ExceptionHandler添加到faces-config.xml

<application>
 <el-resolver>org.primefaces.application.exceptionhandler.PrimeExceptionHandlerELResolver</el-resolver>
</application>
<factory>
 <exception-handler-factory>org.primefaces.application.exceptionhandler.PrimeExceptionHandlerFactory</exception-handler-factory>
</factory>

使用view.xhtml中的代码

<p:ajaxExceptionHandler type="java.lang.BadMessageException" update="exceptionDialog" onexception="PF('exceptionDialog').show();" />

<p:dialog header="Content" widgetVar="exceptionDialog" >
  <p:outputPanel id="display">
    <h:outputText value="#{pfExceptionHandler.type}" escape="false" />
    <h:outputText value="#{pfExceptionHandler.message}" escape="false" />
    <h:outputText value="#{pfExceptionHandler.formattedStackTrace}" escape="false" />
  </p:outputPanel>
</p:dialog>

没有抓到任何例外。只是Jetty在日志中的警告。

4)我试图实现CustomExceptionHandler扩展ExceptionHandlerWrapper并将其添加到faces-config.xml

<factory>
      <exception-handler-factory>
        online_tests.CustomExceptionHandlerFactory
   </exception-handler-factory>
</factory>

如果是大图片,则不会调用handle()方法。只是Jetty在日志中的警告。

5)我尝试实现ErrorHandler,如此处所述 How do I suppress Jetty 8's default ErrorHandler?

在这种情况下,我能够处理请求属性并接收

Throwable throwable = (Throwable) req.getAttribute("javax.servlet.error.exception");

我可以看到,异常的原因是

Caused by: java.lang.IllegalStateException: Form too large: 185992 > 100000
    at org.eclipse.jetty.server.Request.extractFormParameters(Request.java:516) ~[jetty-server-9.4.4.v20170414.jar:9.4.4.v20170414]

但是,我仍然不确定如何通知客户端用户该问题。

0 个答案:

没有答案