Weblogic11g升级至12c时遇org.springframework.faces.ui.DojoClientTextValidator缺失异常求助
java.lang.ClassNotFoundException: org.springframework.faces.ui.DojoClientTextValidator异常 这个问题我之前帮团队排查过,核心原因很明确:Spring Faces 2.4及后续版本彻底移除了org.springframework.faces.ui.DojoClientTextValidator类——因为Spring从2.4版本开始放弃了对Dojo的内置支持,而你之前用的Spring Web Flow 2.3搭配Spring Faces 2.3是包含这个类的,升级到Spring Web Flow 2.4.6后,对应的Spring Faces版本(2.4.x)已经没有这个类了,所以抛出了找不到类的异常。
下面给你三个可行的解决方向,按推荐优先级排序:
方案1:用PrimeFaces原生组件替换Dojo验证器(首推)
既然你的应用已经在用PrimeFaces 5.2,完全没必要再依赖Spring Faces已废弃的Dojo组件,直接用PrimeFaces自带的客户端验证能力替代即可,更贴合你的技术栈,也更稳定:
- 原来的
DojoClientTextValidator主要用于客户端文本长度、格式这类验证,你可以用PrimeFaces的<p:clientValidator>配合标准JSF验证器实现,示例代码如下:<p:inputText id="userEmail" value="#{userBean.email}"> <f:validateRegex pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" /> <p:clientValidator /> </p:inputText> - 如果需要自定义客户端逻辑,还可以用
<p:remoteValidator>或者结合PrimeFaces的p:ajax做异步验证,灵活性更高。
方案2:回退Spring版本并解决Weblogic类冲突(应急可用)
如果暂时没时间大规模替换组件,可以回退到包含该类的Spring版本,同时解决Weblogic 12c初期的Spring jar冲突问题:
- 保持Spring Web Flow 2.3.x + Spring Framework 3.2.x + Spring Faces 2.3.x的组合,然后在应用的
weblogic.xml中添加prefer-application-packages配置,让Weblogic优先加载你应用打包的Spring类,避免和服务器自带的Spring类冲突:
这个配置能解决升级初期的Spring jar冲突,同时保留原来的<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"> <container-descriptor> <prefer-application-packages> <package-name>org.springframework.*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app>DojoClientTextValidator类,但长期来看不推荐,因为这些版本的Spring已经停止维护了。
方案3:手动引入旧版Spring Faces jar(不推荐)
如果一定要保留这个类,可以单独引入Spring Faces 2.3的jar,但这样会带来版本冲突风险——新的Spring Web Flow 2.4.6和旧的Spring Faces 2.3可能存在API不兼容问题,容易引发其他异常,所以只建议作为最后的应急手段。
额外提醒
升级Weblogic 12c时还要注意:Weblogic 12c自带JSF 2.2,PrimeFaces 5.2是支持JSF 2.2的,但要确保应用的JSF配置和服务器版本一致,避免出现JSF类冲突的问题。
内容的提问来源于stack exchange,提问作者user3340820

