我一直在尝试使此安装程序运行几天,但仍然没有运气。这是我一直在使用的测试应用程序:

@Named
@RequestScoped
public class Test {

    private String test = "test";
    public String getTest() { return test; }
    public void setTest(String test) { this.test = test; }
}

并在jsf页面中:
<h:outputText value="#{test.test}"/>

在没有MyFaces的情况下运行此示例可以很好地工作(可以像应该的那样进行“测试”),但是当我在WAR文件中部署MyFaces并在weblogic.xml中进行必要的配置时,CDI似乎无法正常工作(或者至少在JSF和CDI),则输出html中不显示任何内容。不过,MyFaces本身似乎还可以。

我的基本配置如下:
  • WebLogic Server 12c(12.1.1.0),补丁程序应该是最新的,因为我昨天刚刚下载了开发版本,只是为了确保
  • MyFaces-2.1.10,部署在WEB-INF/libs内
  • Beans.xml到位
  • org.apache.myfaces.webapp.StartupServletContextListener已在web.xml中注册
  • WebLogic被配置为使用weblogic.xml使用MyFaces

  • Weblogic.xml的内容:
    <prefer-application-packages>
        <package-name>javax.faces.*</package-name>
        <package-name>com.sun.faces.*</package-name>
        <package-name>com.bea.faces.*</package-name>
    </prefer-application-packages>
    <prefer-application-resources>
        <resource-name>javax.faces.*</resource-name>
        <resource-name>com.sun.faces.*</resource-name>
        <resource-name>com.bea.faces.*</resource-name>
        <resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
        <resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</resource-name>
    </prefer-application-resources>
    

    到目前为止,我学到了什么:
  • WL12c配备了Weld 1.1.3作为其CDI实现。
  • 我读过某个地方(不记得在哪里),每当您决定切换JSF实现时,您都要负责自己集成JSF/CDI。这是真的吗?

  • 到目前为止我尝试过的事情:
  • 将MyFaces CODI添加到混合物中,希望它将以某种方式将Weld和MyFaces粘合在一起,但事实并非如此。
  • 用OpenWebBeans替换Weld作为CDI实现。这似乎起初是可行的,但后来在某些内部sun.reflection包中提供了各种有趣的ClassCastExceptions。无论如何,这是我宁愿避免的解决方案。
  • 使用web.xml和faces-config.xml中的各种选项来手动触发焊接。这似乎使Weld陷入了困境,因为它淹没了各种错误消息的日志。在某种程度上,可以通过将weblogic升级到较新的Weld版本来“修复”这些错误,但是每次执行此操作时,都会遇到下一个错误。再次,我宁愿也避免这条路线。

  • 在保留CDI支持的同时在WL12c上使用MyFaces真的难吗,还是我只是错过了明显的机会?谢谢你的帮助。

    最佳答案

    恐怕没有办法。焊接胶代码必须存在。那些微小的集成层是wls可部署jsf库的一部分,不适用于myfaces...。

    10-07 23:38