1

我的 Maven EAR 项目有两个 WAR 模块和一个 EJB 模块。EJB 模块中有一个 FacesConverter 类,当我尝试从 WAR 模块之一使用它时,它会引发异常。我用注释注册这个转换器 @FacesConverter("org.util.ObjectConverter") 在 JSF 页面中使用它

javax.servlet.ServletException:表达式错误:命名对象:未找到 org.util.ObjectConverter。

当 ObjectConverter 在 WAR 模块中时,它可以正常工作,但不会从 EJB 模块加载。

我在这里想念什么?

干杯

4

1 回答 1

3

为什么把它放在 EJB 模块中?前端(阅读:JSF)工件应该放在 WAR 模块中。EJB 模块应该只包含应该可被 JSF 以外的前端重用的业务服务,例如 JSP/Servlet、Struts2、SpringMVC、JAX-RS 等。EJB 模块绝对不能有单行导入javax.faces.*/依赖在代码中。

JSF 不在 EJB 模块中查找转换器(更不用说任何其他与 JSF 相关的工件,例如验证器、托管 bean 和 Facelets 文件),而只在 WAR 模块中查找。只需将它们保存在 WAR 模块中即可。您认为需要在 WAR 和 EJB 模块之间共享的任何代码都应该重构为一个单独的 Java 项目,该项目最终成为 EAR 模块中的一个公共 JAR 文件(请注意,这反过来也不应该包含任何JSF 特定的工件。

于 2012-11-14T20:54:14.823 回答