<t:inputFileUpload> 将 JSF 1.2 迁移到 JSF 2.2 后不再工作
<t:inputFileUpload> not working anymore after migration JSF 1.2 to JSF 2.2
我正在将我的应用程序从 JSF 1.2 升级到 JSF 2.2 并使用 Tomahawk 1.1.14 版本。
升级后,<t:inputFileUpload>
标签停止工作,组件的值不再绑定到 backingbean 属性。
web.xml
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/WEB-INF/facelets/tags/tomahawk.taglib.xml</param-value>
</context-param>
但是,我在 myfaces 网站上看到上面的参数已被弃用。是否有任何其他方法来包含标记库,或者 JSF 2.2 甚至不需要它?
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
<init-param>
<param-name>uploadMaxFileSize</param-name>
<param-value>50m</param-value>
</init-param>
<init-param>
<param-name>uploadThresholdSize</param-name>
<param-value>1024k</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
在这个过滤器之前,我的 web.xml 中还有另一个过滤器,它是
<filter>
<filter-name>AjaxAnywhere</filter-name>
<filter-class>org.ajaxanywhere.AAFilter</filter-class>
<init-param>
<param-name>preSendHandlerClass</param-name>
<param-value>org.ajaxanywhere.jsf.MyFacesClientStateSavingPreSendHandler</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AjaxAnywhere</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
如果我需要对 Tomahawk 进行更多配置更改以使用 JSF 2.2,谁能帮助我?
谢谢!
从 JSF 2.2 开始,FacesServlet
将借助新的 Servlet 3.0 @MultiartConfig
annotation. Also, since JSF 2.2 there is (finally!) a standard file upload component, the <h:inputFile>
.
自动解析 multipart/form-data
请求。
MyFaces 扩展过滤器和 Tomahawk 文件上传组件基本上与 JSF 2.2 不兼容。过滤器将以自己的方式使用和解析请求,FacesServlet
最终将完全得不到任何请求数据(因此无法继续 JSF 生命周期 "as usual")。单独删除过滤器也不起作用,因为 <t:inputFileUpload>
在内部依赖于 MyFaces 扩展过滤器的 semantics/specifics。
你最好的选择是完全从 web.xml
中删除过滤器,并将 <t:inputFileUpload>
替换为 <h:inputFile>
。它必须绑定到提供 a.o 的 javax.servlet.http.Part
属性。 getInputStream()
你可以像以前一样继续使用 <t:inputFileUpload>
.
<h:inputFile value="#{bean.uploadedFile}" />
private Part uploadedFile;
public void save() {
String name = uploadedFile.getSubmittedFileName();
String type = uploadedFile.getContentType();
long size = uploadedFile.getSize();
InputStream content = uploadedFile.getInputStream();
// ...
}
过滤器的上传最大和阈值大小配置可以迁移到 web.xml
中 FacesServlet
的 <servlet>
条目的 <multipart-config>
条目,如下所示:
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<multipart-config>
<max-file-size>52428800</max-file-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
另请参阅:
- How to upload file using JSF 2.2 <h:inputFile>? Where is the saved File?
与具体问题无关,facelets.LIBRARIES
是 Facelets 1.x 特定的。在 JSF 1.x 时代,Facelets 是一种独立的视图技术。从 JSF 2.0 开始,Facelets 被嵌入到 JSF 本身中,并且它的所有上下文参数都从 facelets.XXX
迁移到 javax.faces.FACELETS_XXX
。您可以在 a.o Overview of all JSF-related web.xml context parameter names and values 中找到它们。但是,您也不需要显式注册该 Tomahawk 标签库。摆脱它。
我正在将我的应用程序从 JSF 1.2 升级到 JSF 2.2 并使用 Tomahawk 1.1.14 版本。
升级后,<t:inputFileUpload>
标签停止工作,组件的值不再绑定到 backingbean 属性。
web.xml
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/WEB-INF/facelets/tags/tomahawk.taglib.xml</param-value>
</context-param>
但是,我在 myfaces 网站上看到上面的参数已被弃用。是否有任何其他方法来包含标记库,或者 JSF 2.2 甚至不需要它?
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
<init-param>
<param-name>uploadMaxFileSize</param-name>
<param-value>50m</param-value>
</init-param>
<init-param>
<param-name>uploadThresholdSize</param-name>
<param-value>1024k</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
在这个过滤器之前,我的 web.xml 中还有另一个过滤器,它是
<filter>
<filter-name>AjaxAnywhere</filter-name>
<filter-class>org.ajaxanywhere.AAFilter</filter-class>
<init-param>
<param-name>preSendHandlerClass</param-name>
<param-value>org.ajaxanywhere.jsf.MyFacesClientStateSavingPreSendHandler</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AjaxAnywhere</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
如果我需要对 Tomahawk 进行更多配置更改以使用 JSF 2.2,谁能帮助我?
谢谢!
从 JSF 2.2 开始,FacesServlet
将借助新的 Servlet 3.0 @MultiartConfig
annotation. Also, since JSF 2.2 there is (finally!) a standard file upload component, the <h:inputFile>
.
multipart/form-data
请求。
MyFaces 扩展过滤器和 Tomahawk 文件上传组件基本上与 JSF 2.2 不兼容。过滤器将以自己的方式使用和解析请求,FacesServlet
最终将完全得不到任何请求数据(因此无法继续 JSF 生命周期 "as usual")。单独删除过滤器也不起作用,因为 <t:inputFileUpload>
在内部依赖于 MyFaces 扩展过滤器的 semantics/specifics。
你最好的选择是完全从 web.xml
中删除过滤器,并将 <t:inputFileUpload>
替换为 <h:inputFile>
。它必须绑定到提供 a.o 的 javax.servlet.http.Part
属性。 getInputStream()
你可以像以前一样继续使用 <t:inputFileUpload>
.
<h:inputFile value="#{bean.uploadedFile}" />
private Part uploadedFile;
public void save() {
String name = uploadedFile.getSubmittedFileName();
String type = uploadedFile.getContentType();
long size = uploadedFile.getSize();
InputStream content = uploadedFile.getInputStream();
// ...
}
过滤器的上传最大和阈值大小配置可以迁移到 web.xml
中 FacesServlet
的 <servlet>
条目的 <multipart-config>
条目,如下所示:
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<multipart-config>
<max-file-size>52428800</max-file-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
另请参阅:
- How to upload file using JSF 2.2 <h:inputFile>? Where is the saved File?
与具体问题无关,facelets.LIBRARIES
是 Facelets 1.x 特定的。在 JSF 1.x 时代,Facelets 是一种独立的视图技术。从 JSF 2.0 开始,Facelets 被嵌入到 JSF 本身中,并且它的所有上下文参数都从 facelets.XXX
迁移到 javax.faces.FACELETS_XXX
。您可以在 a.o Overview of all JSF-related web.xml context parameter names and values 中找到它们。但是,您也不需要显式注册该 Tomahawk 标签库。摆脱它。