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

Primefaces 10迁移后p:inputTextarea换行符丢失问题求助

解决方案

方案1:使用Primefaces Ajax文件上传(最优解)

Primefaces自带的<p:fileUpload>组件支持高级Ajax上传模式,无需全局给<h:form>设置enctype="multipart/form-data"属性,组件会自动处理文件上传的编码逻辑,完全不影响同表单下其他输入组件(包括p:inputTextarea)的参数提交,换行符可以正常保留。
只需将你的文件上传组件配置调整为如下模式即可:

<p:fileUpload mode="advanced" 
              fileUploadListener="#{yourBean.handleFileUpload}"
              allowTypes="/(\.|\/)(pdf|doc|docx)$/" />

方案2:升级Primefaces版本

该问题属于Primefaces 10.0.x版本的已知Bug,在Primefaces 11及以上版本中已经完成修复,只需将Primefaces依赖版本升级至11.0.0或更高,即可原生支持multipart表单下textarea换行符正常提交,无需修改业务代码。

方案3:临时兼容方案(不推荐,仅用于无法升级也无法调整上传模式的场景)

如果受项目约束暂时无法调整依赖或上传逻辑,可以通过前后端转义的方式临时规避:

  1. 给表单提交按钮添加前端事件,提交前将textarea的换行符替换为自定义占位符:
// 提交前执行
const textarea = document.getElementById('offercommentTextareaId');
textarea.value = textarea.value.replace(/\n/g, '||NEWLINE||');
  1. 后端接收到offercomment参数后,再将占位符替换回换行符:
String offercomment = supplierOffer.getOffercomment().replace("||NEWLINE||", "\n");
supplierOffer.setOffercomment(offercomment);

原理说明

该问题的本质是Primefaces 10内置的multipart表单解析逻辑存在缺陷,会误将textarea内容中的换行符识别为多部分数据的边界分隔符,导致换行符被错误过滤。ICEfaces 4的multipart解析器实现逻辑不同,因此不存在该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:27:02