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

jakarta.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL未转空串为null求助

空字符串转Null失效问题:表单提交空串注入后台Bean仍为空而非预期Null

问题描述

表单提交的空字符串注入后台Bean时始终是空串,无法转为预期的Null,该问题尚未解决。

依赖配置(pom.xml)

<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-api</artifactId>
    <version>9.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>12.0.0</version>
    <classifier>jakarta</classifier>
</dependency>
<dependency>
    <groupId>org.primefaces.extensions</groupId>
    <artifactId>primefaces-extensions</artifactId>
    <version>13.0.0-RC2</version>
    <classifier>jakarta</classifier>
</dependency>
<dependency>
    <groupId>org.omnifaces</groupId>
    <artifactId>omnifaces</artifactId>
    <version>4.2</version>
</dependency>       

已配置的上下文参数(web.xml)

已添加JSF官方上下文参数,本应将提交的空字符串转为Null:

<context-param>
  <param-name>jakarta.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
  <param-value>true</param-value>
</context-param>

运行环境

使用TomEE Plus 9.1.0内置的Tomcat v10.0.27,服务器自动提供Apache MyFaces作为JSF实现,启动日志如下:

INFO: Server version name:   Apache Tomcat (TomEE)/10.0.27 (9.1.0)    
INFO: Registering OpenAPI servlet on /openapi for application 
Jul 20, 2023 3:41:47 PM org.apache.myfaces.ee.MyFacesContainerInitializer onStartup
INFO: Using OmniFaces version 4.2
INFO: MyFaces Core Servlet 4.0 support enabled

已尝试的方案

  • 切换Dynamic Web Module版本为5.0和4.0,问题依旧
  • 参考空字符串转Null的相关解决方案,确认其中的EmptyToNullStringELResolver适配JSF 4.0,已将导入包从javax.*改为jakarta.*:
import jakarta.el.ELContext;
import jakarta.el.ELResolver;

推测可能存在JSF配置遗漏,寻求解决方案。


解决方案建议

1. 补充MyFaces特定配置

Apache MyFaces除了JSF标准参数外,还有自身的空串转Null配置,需在web.xml中添加:

<context-param>
    <param-name>org.apache.myfaces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

部分MyFaces版本对标准参数的支持存在优先级问题,补充该参数可确保规则生效。

2. 确认OmniFaces Resolver配置

OmniFaces的EmptyToNullELResolver会覆盖默认行为,需在faces-config.xml中正确注册该Resolver:

<application>
    <el-resolver>org.omnifaces.el.EmptyToNullELResolver</el-resolver>
</application>

注:OmniFaces 4.x版本已内置该Resolver,若已添加依赖,需确认无配置覆盖情况。

3. 检查PrimeFaces组件属性

部分PrimeFaces组件(如InputText)的trim属性需配合转Null规则使用,确保配置:

<p:inputText value="#{bean.field}" trim="true" />

开启trim="true"会先去除输入空格,再将空串转为Null。

4. 验证Bean属性类型

确保后台Bean的目标属性为String类型,避免使用Optional<String>等可能绕过转Null规则的类型。


内容的提问来源于stack exchange,提问作者Ted Spradley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:27:32