ファイルのアップロードは、小さなファイル (既定の 2 MB 制限未満) では機能しますが、大きなファイルでは機能しません。Tomcat 8.0 で JSF を使用しており、web.xml を適切に変更して制限を増やしました。javax.servlet.MultipartConfig のコンストラクターにブレークポイントを配置したので、web.xml 構成を読み取ることがわかります。ただし、アクションが呼び出されると、デフォルトの 2MB に戻ります (特に Request.parseParts(...) では、ラッパーの構成が null であるため、コネクタのデフォルトが使用されます)。
WEB.xml:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<multipart-config>
<max-file-size>-1</max-file-size>
<max-request-size>-1</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
home.xhtml
<h:form id="contentFormId" enctype="multipart/form-data">
...
<h:inputFile style="display:none;" id="fileUpload" value="#{bean.uploadItem}">
</h:inputFile>
<h:commandButton id="browse" action="#{bean.fileUploadListener}" value="Add Files" onclick="$('#contentFormId-fileUpload').click()">
</h:commandButton>
...
</h:form>
context.xml
<?xml version="1.0" encoding="utf-8"?>
<Context allowCasualMultipartParsing="true"
...
</Context>
更新 単純化されたアプリケーションを作成した後、Rewrite ライブラリが原因で、別のコンテナー ラッパーが要求で使用されているようです。
書き換えなし:
Request.getWrapper()
リターンStandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestWeb].StandardWrapper[Faces Servlet]
Rewrite@URLMapping
アノテーション付き:
Request.getWrapper()
戻り値StandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestWeb].StandardWrapper[default]
したがって、このアプリケーションのデフォルト コンテナを Faces の設定方法と同様に設定するか、Rewrite を Faces Servlet コンテナに委任する方法を見つける必要があるようです。Tomcat で maxPostSize を編集することはオプションです (デフォルトを変更します) が、それを避けることができる場合は取りたくないものです。