You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSphere(MyFaces+Apache EL)下JSF输入提交空串而非null的问题排查

JSF空输入提交""而非null的问题排查(WebSphere 9.0.5.18)

问题背景

JSF表单的原生<h:inputText>组件提交空输入时,后台Bean的setter接收到的是空字符串""而非null,但相同应用在Wildfly上运行正常。已配置以下参数但无效:

  • INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 在web.xml中设为true
  • JVM参数org.apache.el.parser.COERCE_TO_ZERO设为false
  • 运行时使用Apache MyFaces EL解析器
  • 无自定义转换器/阶段监听器干扰

调试显示:ValueExpressionImpl.setValue(elContext, null)传入的是null(符合预期),但后续FacesCompositeELResolver.setValue(...)收到的是""(异常),说明EL解析过程中null被转换为""。

可能的原因及排查方向

1. WebSphere内置EL解析器的优先级干扰

WebSphere自带了EL实现,即便配置了MyFaces的EL解析器,其默认的PARENT_FIRST类加载策略可能导致WebSphere的ELResolver优先被加载,混入FacesCompositeELResolver中。这类内置解析器可能存在独立的空值转换逻辑,忽略INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL配置。

  • 排查:将应用类加载策略改为PARENT_LAST,确保MyFaces的EL相关jar包优先加载;调试查看FacesCompositeELResolver中的Resolver列表,确认是否存在WebSphere相关实现类。

2. WebSphere容器级配置覆盖

WebSphere对JSF有专属扩展配置,可能在服务器级别或应用的ibm-web-ext.xml中设置了参数,覆盖web.xml的配置:

  • 检查ibm-web-ext.xml中是否存在com.ibm.ws.jsf.INTERPRET_EMPTY_STRING_AS_NULL参数,若设为false会覆盖全局配置;
  • 查看WebSphere控制台的JSF容器设置,确认是否有相关空值转换的自定义参数。

3. MyFaces与WebSphere的版本兼容性问题

WebSphere 9.0.5.18绑定的MyFaces版本可能存在特定环境下的bug,导致INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL逻辑失效:

  • 查看MyFaces官方文档或版本说明,确认对应版本在WebSphere环境下是否有已知的空值转换问题;
  • 尝试升级MyFaces到与WebSphere 9兼容的最新稳定版本,验证问题是否解决。

4. WebSphere扩展模块的拦截修改

WebSphere的某些内置模块(如安全模块、请求处理扩展)可能在EL值传递过程中进行拦截,将null转换为"":

  • 调试追踪FacesCompositeELResolver中每个Resolver的setValue调用,定位触发转换的具体Resolver;
  • 临时禁用WebSphere的非必要扩展模块(如安全验证、自定义请求过滤器),验证是否影响空值转换逻辑。

5. Servlet容器的参数预处理差异

WebSphere的Servlet容器在请求参数解析阶段,可能已将空请求参数转换为"",后续JSF的INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL逻辑无法生效:

  • 对比Wildfly与WebSphere的请求参数解析逻辑,检查WebSphere是否对空参数有默认转换规则;
  • 调试查看请求到达JSF应用时的参数值,确认是否在进入JSF生命周期前已被转换为""。

内容的提问来源于stack exchange,提问作者EPMS Devteam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:34:51