JSF 引擎配置参数

WebSphere® Application Server,您可以配置JavaServerFaces(JSF)引擎配置参数,以便在生产服务器环境和开发环境中获得最佳性能。

JSF 引擎参数区分大小写。 如果为参数指定的值由两个或更多以空格分隔的字组成,那么必须对此值添加引号。

使用 SUN RI 的 JSF 选项

表 1. 使用 SUN RI 的 JSF 选项该表显示了 SUN RI 参数名称、描述和默认值。
SUN RI 参数名 描述 缺省值
com.sun.faces.numberOfViewsInSession 指定当使用“服务器端状态保存”时存储在会话中的视图数。 如果设置为true在使用客户端状态保存时,该参数通过在编码之前压缩状态并将其写入隐藏字段来减少发送到客户端的字节数。 15
com.sun.faces.numberOfLogicalViews 指定当使用“服务器端状态保存”时存储在会话中的逻辑视图数。 15
com.sun.faces.enableHighAvailability 如果设置为true当使用服务器端状态保存时,视图的序列化表示存储在服务器上。 这会提供故障转移和服务器集群支持。
com.sun.faces.injectionProvider 定义用于 JSF 注释的注入提供程序。
com.sun.faces.serializationProvider 定义用于将 JSF 对象序列化到会话的序列化提供程序。  
com.sun.faces.responseBufferSize 定义 JSF 响应的响应缓冲区大小。 1048
com.sun.faces.clientStateWriteBufferSize   8192
com.sun.faces.expressionFactory 指定要使用的缺省 EL 表达式工厂。 org.apache.el.ExpressionFactoryImpl
com.sun.faces.clientStateTimeout 用于客户端状态保存的超时值。 当达到设定的值时,状态就会丢失。 无限期
com.sun.faces.displayConfiguration  
com.sun.faces.validateXml 当设置为true、标签库 XML 文件和使用模式的 Faces 配置 XML 文件在应用程序启动时进行验证。
com.sun.faces.verifyObjects  
com.sun.faces.forceLoadConfiguration  
com.sun.faces.disableVersionTracking  
com.sun.faces.enableHtmTagLibValidator  
com.sun.faces.prerefXHTML  
com.sun.faces.compressViewState  
com.sun.faces.compressJavaScript  
com.sun.faces.sendPoweredByHeader  
com.sun.faces.enableJSStyleHiding  
com.sun.faces.writeStateAtFormEnd  
com.sun.faces.enableLazyBeanValidation  
com.sun.faces.enableLoadBundle11Compatibility  
com.sun.faces.enableRestoreView11Compatibilty  
com.sun.face.serializeServerState  
com.ibm.ws.jsf.JSP_UPDATE_CHECK 此参数会监视 Faces JavaServer Pages (JSP) 文件的修改,并使用所做的更改同步正在运行的服务器,而不必重新启动服务器。 如果此参数设置为false或从部署描述符中删除,对 Faces JSP 文件所做的任何更改都可能不会显示在服务器上,直到服务器重新启动为止。 将此参数设置为true在开发和调试 Faces JSP 文件时,可以提高开发环境的性能。  
com.ibm.ws.jsf.JSF_IMPL_CHECK 设置com.ibm.ws.jsf.JSF_IMPL_CHECK参数为 true,以检查应用程序重新启动时 SUN RI 和MyFaces实施方案已经转换。 如果实现已切换,则运行时将从临时目录中删除所有生成的 JSP 文件,并且在下次请求时重新翻译 JSP 文件。  
com.ibm.ws.jsf.associateLabelWithId com.ibm.ws.jsf.associateLabelWithId自定义属性改变了<h:selectOneRadio>和<h:selectManyCheckbox>成分。 此标签不再包含输入元素。 相反地,每个输入元素都具有唯一标识,且此标签与用于该属性的标识相关联。 定义并设置com.ibm.ws.jsf.associateLabelWithId上下文参数true在里面web.xml文件。
请使用以下代码作为示例。
<context-param>
<description>
Set to true to explicitly associate labels 
with their input elements for select one 
radio buttons and select many check box lists.
</description>
<param-name>com.ibm.ws.jsf.associateLabelWithId
</param-name>
<param-value>true</param-value>
</context-param>
 
com.ibm.ws.jsf.disableEnqueuedMessagesWarning com.ibm.ws.jsf.disableEnqueuedMessagesWarning自定义属性禁用以下警告消息:
FacesMessage(s ) 已入队,但可能尚未显示。
当此属性设置为true在里面web.xml文件中,此警告消息未包含在SystemOut.log文件。
避免麻烦:此上下文参数仅适用于使用 Sun 参考实现 (RI) 进行 JSF 实现的 JSF 应用程序。
笔记:本主题引用一个或多个应用程序服务器日志文件。 作为推荐的替代方案,您可以将服务器配置为使用高性能可扩展日志记录 (HPEL) 日志和跟踪基础结构,而不是使用SystemOut.logSystemErr.logtrace.log , 和activity.log分布式文件和IBM® i系 统。 您还可以将 HPEL 与本机z/OS®伐木设施。 如果您正在使用 HPEL,那么可以从服务器概要文件 bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。 查看有关使用 HPEL 的信息了解有关使用 HPEL 的更多信息,以排除应用程序故障。
使用以下代码作为如何定义和设置的示例com.ibm.ws.jsf.disableEnqueuedMessagesWarning 上下文参数true在里面web.xml文件。
<context-param>
<description>
Set to true to disable the following warning 
message:
FacesMessage(s) have been enqueued, but might 
not have been displayed
</description>
<param-name>
 com.ibm.ws.jsf.disableEnqueuedMessagesWarning
</param-name>
<param-value>true</param-value>
</context-param>
 
com.ibm.ws.jsf.disableStylePassthroughForCheckboxList 此定制属性可防止将样式信息传递到复选框列表中的项。 此属性默认为false维持当前行为。 定义并设置 com.ibm.ws.jsf.disableStylePassthroughForCheckboxList上下文参数true在里面web.xml文件以防止将样式信息传递到复选框列表中的项目。 请使用以下代码作为示例。
<context-param>
<description>
Set to true if style information should not 
be passed into items of check box list
</description>
<param-name>
com.ibm.ws.jsf.disableStylePassthroughForCheckboxList
</param-name>
<param-value>true</param-value>
</context-param>
 
com.ibm.ws.jsf.DISABLE_UIDATA_NESTED_CHECK com.ibm.ws.jsf.DISABLE_UIDATA_NESTED_CHECK自定义属性确定是否为嵌套在非 UIData 组件的迭代器组件内的 UIData 组件生成唯一的 ID。 当此属性设置为true在里面web.xml文件,即使 UIData 组件嵌套在非 UIData 组件的迭代器组件内,也会为 UIData 组件生成唯一的 ID。

当此属性设置为 false 时,如果 JSF dataTable 组件嵌套在未扩展 UIData 的组件内,例如,Java 窗口小部件库 (JWL) dataIterator 组件,那么为行生成的标识不会正确递增。 这种情况可能导致将重复的标识分配给多个 JSF 组件。

使用以下代码作为如何定义和设置的示例com.ibm.ws.jsf.DISABLE_UIDATA_NESTED_CHECK 上下文参数true在里面web.xml文件。
<context-param>
<description>
Set to true to enable unique IDs to be 
generated for UIData components evenif they 
are nested inside iterator components that are
not UIData components.
</description>
<param-name>
com.ibm.ws.jsf.DISABLE_UIDATA_NESTED_CHECK
</param-name>
<param-value>true</param-value>
</context-param>
 
com.ibm.ws.jsf.loadExternalDtd 在解析faces-config.xml如果从包含的库中找到该文件,即使在禁用验证的情况下,Faces 配置解析器也会尝试加载 DTD。 Faces 配置解析器使用 SAXParser 来读取faces-config.xml。 SAXParser 解析器的缺省行为是始终装入 DTD,即使在禁用验证的情况下亦如此。 在与因特网隔离的系统上初始化 Faces Servlet 时,此行为会导致错误。
在你的web.xml文件,设置com.ibm.ws.jsf.loadExternalDtd上下文参数false让 Faces 配置解析器设置“http://apache.org/xml/features/nonvalidating/load-external-dtd ”功能设置为假。
<context-param>
<description>
When set to false, this property sets a 
feature on the SAX parser to prevent loading 
the external DTD.
</description>
<param-name>com.ibm.ws.jsf.loadExternalDtd</param-name>
<param-value>false</param-value>
</context-param>
 
com.ibm.ws.jsf.REMOVE_CHILD_FROM_FACET 对于重复的 ID,IllegalStateException在使用包含以下项的方面组件时可能会发生<h:outputStylesheet/> 。
使用如以下所示的构面组件时:
<f:facet name="text">
     <h: outputStylesheet: library="theme" name="stylesheet.css"/>
</f:facet>
由于 JSF 发现重复标识,可能会发生以下异常:
java.lang.IllegalStateException: component with duplicate id"dup_id" found at
org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.
checkIds(DefaultFaceletsStateManagementStrategy.java:781)
JSF 容器已更新以确保不会出现重复的 ID,但您必须启用com.ibm.ws.jsf.REMOVE_CHILD_FROM_FACET到true这样就激活了 JSF 容器对重复 id 的处理。
enableRestoreView11Compatibility 使用 Sun Reference Implementation 时,JSF 1.2 应用程序可能会在负载不足时创建 ViewExpiredException 异常。 如果在会话中找不到视图,那么可以在 JSF 中使用兼容性方式来创建新的视图。 这可能会产生不利行为,因为这是一个新的视图,并且视图中通常存在的项目(例如状态)不再可用。 使用以下代码作为示例,在 web.xml 文件中将 com.sun.faces.enableRestoreView11Compatibility 上下文参数设为 true。 仅当 Sun Reference Implementation 在使用中时,这种情况才适用。
<context-param>
 <param-name>
 com.sun.faces.enableRestoreView11Compatibility
 </param-name>
 <param-value>true</param-value>
</context-param>
 
enableViewStateIdRendering com.sun.faces.enableViewStateIdRendering 定制属性控制 javax.faces.ViewState 隐藏字段的标识属性的呈示。 使用以下代码作为示例来设置com.sun.faces.enableViewStateIdRendering上下文参数true在里面web.xml文件。
<context-param>
 <param-name>com.sun.faces.enableViewStateIdRendering
 </param-name>
 <param-value>true</param-value>
</context-param>
 

org.apache.el.parser.COERCE_TO_ZERO

允许 WebSphere Application Server 用来强制空字符串整数值为 0 值的表达式语言 (EL),或者不允许强制为 0 值并且不保留空字符串整数值。 缺省值为 true,该值允许空字符串整数值强制为 0 值。
重要的:为了防止空值被强制转换为 0 值MyFaces应用程序中,以下上下文参数web.xml应用程序:应设置为确保所有可能的空值或空值实例都不会被强制为零。
<context-param>
	<param-name>javax.faces.
		INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
	</param-name>
	<param-value>true</param-value>
</context-param>
使用管理控制台设置 org.apache.el.parser.COERCE_TO_ZERO 属性。
  1. 展开服务器,然后选择 WebSphere Application Server。 从列表单击相应服务器。
  2. 在服务器基础架构下,展开 Java 和进程管理 > 单击进程定义。
  3. 在“其他属性”下,单击“Java 虚拟机”。
  4. 在“其他属性”下,单击“定制属性”。
  5. 单击新增并添加值为 falseorg.apache.el.parser.COERCE_TO_ZERO 属性(如果不想让空值强制为零)。
  6. 单击保存以保存更改,并重新启动 WebSphere Application Server 以确保更改生效。

MyFaces 的 JSF 选项

表 2. JSF 选项MyFaces该表显示了 JSF 参数名称、描述和默认值。
JSF 参数名 描述 缺省值
org.apache.myfaces.RESOURCE_VIRTUAL_PATH   /faces/myFacesExtensionResource
org.apache.myfaces.PRETTY_HTML 如果此值为 true,那么将对所显示的 HTML 代码进行格式化以便于阅读。 写入的额外行分隔符和空格不会影响 HTML 代码。
org.apache.myfaces.ALLOW_JAVASCRIPT 此参数向 MyFaces 表明所显示的 HTML 输出中是否允许 JavaScript 代码。 如果允许 JavaScript,那么 command_link 锚具有用于提交相应格式的 JavaScript 代码。 如果不允许 JavaScript,那么会将状态保存信息和嵌套的参数添加为 URL 参数。
org.apache.myfaces.DETECT_JAVASCRIPT  
org.apache.myfaces.AUTO_SCROLL 如果为 true,那么将呈现 JavaScript 函数,该函数可以针对每一个请求恢复以前的垂直滚动。 如果页面中有很长的列表,并且不希望浏览器页面在您触发同一页面上的链接或按钮操作时跳至页面开头,那么此功能很方便。
org.apache.myfaces.ADD_RESOURCE_CLASS   org.apache.myfaces.renderkit.html.util.DefaultAddResource
org.apache.myfaces.CHECK_EXTENSIONS_FILTER 此参数将检查在 Web 应用程序需要的情况下,是否存在正确配置的扩展过滤器。
org.apache.myfaces.COMPRESS_STATE_IN_SESSION 将此选项设为 true 以压缩已序列化的状态,然后再将其写入到会话。 如果将此选项设为 false,那么不会压缩状态。 此选项仅适用于状态保存方法设置为服务器,并且org.apache.myfaces.SERIALIZE_STATE_IN_SESSION被设定为true
org.apache.myfaces.FLASH_SCOPE_DISABLED 将此上下文参数设置为 true 以禁用 cookie 中生成但未发送的 Flash Scope。 false
org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION 定义存储在会话中的最新视图数。 仅当状态保存方法设为 server 时,此选项才适用。 20
org.apache.myfaces.READONLY_AS_DISABLED_FOR_SELECTS  
org.apache.myfaces.SERIALIZE_STATE_IN_SESSION 将此选项设为 true 以将状态序列化为字节流,然后再将其写入到会话。 如果将此选项设为 false,那么不会将状态序列化为字节流。 仅当状态保存方法设为 server 时,此选项才适用。
org.apache.myfaces.STRICT_JSF_2_CC_EL_RESOLVER 确保通过源 EL 表达式调用 getType() 时,与链接 EL 表达式一起使用的组件可使用添加了 composite: 属性的元数据信息。 将此属性设置为 true 将禁用此函数。

org.apache.el.parser.COERCE_TO_ZERO

允许 WebSphere Application Server 用来强制空字符串整数值为 0 值的表达式语言 (EL),或者不允许强制为 0 值并且不保留空字符串整数值。 缺省值为 true,该值允许空字符串整数值强制为 0 值。
重要的:为了防止空值被强制转换为 0 值MyFaces应用程序中,以下上下文参数web.xml应用程序:应设置为确保所有可能的空值或空值实例都不会被强制为零。
<context-param>
	<param-name>javax.faces.
		INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
	</param-name>
	<param-value>true</param-value>
</context-param>
使用管理控制台设置 org.apache.el.parser.COERCE_TO_ZERO 属性。
  1. 展开服务器,然后选择 WebSphere Application Server。 从列表单击相应服务器。
  2. 在服务器基础架构下,展开 Java 和进程管理 > 单击进程定义。
  3. 在“其他属性”下,单击“Java 虚拟机”。
  4. 在“其他属性”下,单击“定制属性”。
  5. 单击新增并添加值为 falseorg.apache.el.parser.COERCE_TO_ZERO 属性(如果不想让空值强制为零)。
  6. 单击保存以保存更改,并重新启动 WebSphere Application Server 以确保更改生效。

org.apache.myfaces.DEBUG_PHASE_LISTENER 用于在 Development Project Stage 中启用 DebugPhaseListener
com.ibm.ws.jsf.disablealternatefacesconfigsearch 用于仅对设置了此上下文参数的 Web 应用程序禁用 META-INF/*.faces-config.xml 的 MyFaces 搜索。 如果已设置上下文参数和 Web 容器定制属性,那么上下文参数占优。

com.ibm.ws.jsf.fullyRestoreDynamicComponent

将此选项设置为true正确保存具有动态创建的子组件。

com.ibm.ws.jsf.enableRemoveRestoredViewState

将此选项设置为true解决ViewExpiredException多窗口场景中出现异常。

com.ibm.ws.jsf.updateFaceletContextKey

当一个<f:ajax/>标签出现在 JSF 页面中的<ui:include/>标签和监听器中引用的名称MethodExpression被重新定义为<ui:param/>在里面<ui:include/>,变量可能会被错误解析。 设置web.xml选择true以启用新行为。

使用 SUN RI 或 MyFaces 的 JSF 选项

以下选项适用于 SUN RI 和 MyFaces 实现。

表 3. 使用 SUN RI 或MyFaces该表显示了 JSF 参数名称、描述和默认值。
JSF 参数名 描述 缺省值
javax.faces.STATE_SAVING_METHOD 指定在其中保存状态信息的位置。 有效值为server,保存在HttpSession,和client,该字段保存为表单中的隐藏字段。
笔记:如果你使用javax.faces.STATE_SAVING_METHOD为了节省客户端, JavaServerPages 标准标签库 (JSTL) 和 Facelets。 对于某些处理场景,JSF Facelets 支持在处理 Facelets 的所有客户端保存要求方面存在限制。 对于这些情况,服务器端保存是一种选择。 如果需要保存客户端状态,则使用 JSF 标签。
服务器
javax.faces.CONFIG_FILES 使用此参数来指定上下文相关资源路径的逗号分隔列表,JSF 实现会在这些路径中查找应用程序配置资源,然后再装入配置资源 /WEB-INF/facesconfig.xml(如果资源存在)。 不适用
javax.faces.DEFAULT_SUFFIX 指定包含 JSF 组件的扩展映射资源的缺省后缀。 .jsp
javax.faces.LIFECYCLE_ID 使用此参数来配置备用生命周期标识。 不适用
com.ibm.ws.jsf.JSF_IMPL_CHECK 指定重新启动应用程序时必须重新编译 Web 模块中的 JSP 文件(因为已更改所使用 JSF 的实现)。 在重新启动应用程序之后,下次访问此模块的 JSP 文件时,会针对管理控制台中所指定 JSF 的所选实现来重新编译 JSP 文件。 对 JSP 文件所进行的后续调用不会导致重新编译。 此选项的缺省设置为 false。 请将此选项用于开发环境,而非生产环境。 不适用

在 MyFaces 中具有等价行为的 Sun RI 上下文参数

表 4. Sun RI 上下文参数和等效参数MyFaces行为 该表显示 SUN RI 参数名和 MyFaces 等价值。
SUN RI 参数名 描述 RI 缺省值 MyFaces 等价项 MyFaces 缺省值
com.sun.faces.numberOfViewsInSession 定义存储在会话中的最大序列化视图数。 与服务器状态保存配合使用。 15 org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION 20
com.sun.faces.compressViewState 如果为 true,将在对视图进行序列化之后、base64 编码之前对其进行压缩。 与客户机状态保存配合使用。 从 1.2_09 开始,如果 com.sun.faces.serializeServerState 设置为 true(当使用此选项时,这对会话中的状态大小有很大影响,且 CPU 使用率更高。),那么此选项还会影响服务器端状态保存。 org.apache.myfaces.COMPRESS_STATE_IN_CLIENT(适用于客户机端状态保存)或 org.apache.myfaces.COMPRESS_STATE_IN_SESSION(适用于服务器端状态客户机) false(适用于客户机端状态保存)和 true(适用于服务器端状态保存)
com.sun.faces.validateXml 如果为 true,JSF 将验证配置文件。 org.apache.myfaces.VALIDATE
com.sun.faces.injectionProvider 此参数用于指定实现 InjectionProvider 的类。 不适用 注入提供程序由 WebSphere Application Server 运行时提供 不适用
com.sun.faces.serializationProvider 此参数用于指定实现 SerializationProvider SPI 的类。 此实现表示 JSF 实现用来启用备用序列化实现的挂钩。 不适用 org.apache.myfaces.SERIAL_FACTORY - 类必须实现 org.apache.myfaces.shared_impl.util.serial.SerialFactory SPI 而不是 com.sun.faces.spi.SerializationProvider 不适用
com.sun.faces.enabledJSStyleHiding 如果为 true,那么将显示 HTML ResponseWriter 实现所呈现的内联 JavaScript,以便隐藏较早版本浏览器实现中的脚本。 org.apache.myfaces.WRAP_SCRIPT_CONTENT_WITH_XML_COMMENT_TAG
com.sun.faces.serializeServerState 如果已启用,那么将在组件状态(并非树)存储在会话中之前对其进行序列化。 对于具有视图状态对模型更改敏感问题的应用程序,可能需要这样做。 org.apache.myfaces.SERIALIZE_STATE_IN_SESSION
笔记:在之前的版本中WebSphere Application Server,使用时javax.faces.component.UIComponent.findComponent (字符串表达式),可能会返回不正确的 UIComponent。

在此 WebSphere Application Server 发行版中,javax.faces.component.UIComponent.findComponent 已更新为返回正确的 UIComponent。 必须将 JSF 上下文参数 com.ibm.ws.jsf.FIND_COMPONENT_RECURSE_CHILD_ID 设置为 true