Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 从其他项目中引用ManageBean_Eclipse_Google App Engine_Jsf - Fatal编程技术网

Eclipse 从其他项目中引用ManageBean

Eclipse 从其他项目中引用ManageBean,eclipse,google-app-engine,jsf,Eclipse,Google App Engine,Jsf,我使用谷歌应用引擎1.9.51。在Eclipse中,我为多服务创建了4个项目: -一只耳朵(进球完成) -一个普通jave项目(目标完成情况) -2个Web应用程序(GoalsCompletion\u默认和GoalsComletion\u任务),如下面的屏幕截图所示 在web应用程序中(如GoalsCompletion_default), -我很少有jsf文件引用公共项目中定义的ManageBean(即GoalsCompletion\u common)。 -我也有jave文件引用公共项目中定义

我使用谷歌应用引擎1.9.51。在Eclipse中,我为多服务创建了4个项目: -一只耳朵(进球完成) -一个普通jave项目(目标完成情况) -2个Web应用程序(GoalsCompletion\u默认和GoalsComletion\u任务),如下面的屏幕截图所示

在web应用程序中(如GoalsCompletion_default), -我很少有jsf文件引用公共项目中定义的ManageBean(即GoalsCompletion\u common)。 -我也有jave文件引用公共项目中定义的接口

我将公共项目作为web应用程序部署的依赖项,如下所示:

我面临的问题是在web应用程序中,当我调用公共项目中定义的ManageBean的getter时,什么都没有返回

比如说

在web.xml中

<context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>#{userSession.theme}</param-value>
如果我将UserSessionManageBean从公共项目移动到web应用程序,则返回值


GAE并没有抱怨找不到类,并没有错误,只是返回空值,所以在我的部署配置中似乎有问题。有什么帮助吗?

感谢OTM对上述帖子的建议

是的,一个简单的解决方案就是在faces-config.xml中定义托管bean,并将其放在公共项目的\META-INF下

faces-config.xml的示例:

<?xml version="1.0"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">

    <managed-bean>
        <managed-bean-name>beanName</managed-bean-name>
        <managed-bean-class>package.BeanName</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

豆名
包装.豆名
一场

几次尝试后出错

实际上,在web应用程序项目中,若将公共项目作为其web部署程序集的依赖项包含,则不需要在公共项目/web-INF文件夹中包含faces-config.xml

在本例中,我可以使用注释而不是xml来配置bean

这一点不起作用的原因是,每次我对公共项目的pom.xml进行更改(例如包括新的依赖项或更改依赖项版本)时,Eclipse都会删除我的设置Web部署程序集

因此,在部署/运行服务器之前,我只需要确保公共项目存在于其他web项目的web部署程序集中。如果没有,我需要再次添加


不确定的是,使设置永久性的一种解决方法是在每个web应用程序中,将公共项目中的管理bean添加到faces-config.xml中。而且它起作用了。因此,web应用程序似乎不会扫描从其他项目生成的jar文件。不确定这是唯一的解决方案还是有更好的方法…阅读“web片段”…您可以使用
EJB
-s在其他应用程序中访问托管bean。或者
JAX-RS
。GAE不支持J2EE。那个公共项目只是一个java项目,其中的代码我计划被其他2个web应用程序重用。这就是为什么它被打包为jar文件并包含在其他web应用程序项目中。因此,无论我的应用服务器是不是GAE,都无法与EJB-s或JAX-RS共享,因为它不是一个普通的web应用程序。请看,使用xml配置bean是非常早的历史。使用注释更为现代,当您使用JSF2.2时,甚至建议开始使用CDI而不是jsf管理的BeanshiMate。。。是的,我用的是2.2.10。我可以知道你使用CDI的意思吗?有一个叫做谷歌的东西。。。但使用stackoverflow搜索将有助于解决问题。还有
<?xml version="1.0"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">

    <managed-bean>
        <managed-bean-name>beanName</managed-bean-name>
        <managed-bean-class>package.BeanName</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>