2014-11-08 62 views
0

这是我写的SCCE。我完全不熟悉java web应用程序编程,这意味着我完全有可能缺少某些东西。所以,对于新手前进的任何建议都非常感谢。我已经尝试引用包名称,但没有运气。有什么我应该引用的web.xml中的会话bean?因为这些文件位于已部署EAR文件内的WAR文件中。我应该注意到我正在使用java服务器端和EE7。Java EE应用程序以秒为单位显示当前服务器时间

GlassFish4错误
/index.xhtml @ 10,78结合= “#{serverSessionBean.time}”:目标不可达,识别符 'ServerSessionBean'

指数欢迎文件

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html"> 
    <h:head> 
     <title></title> 
    </h:head> 
    <h:body> 
     The current server time is: 
     <h:outputText binding="#{serverSessionBean.time}"/> 
    </h:body> 
</html> 

ServerSessionBean

package com.incredibleifs; 

import java.util.Calendar; 
import javax.ejb.Stateless; 
import javax.inject.Named; 

@Stateless(description = "A stateless session bean to hold server generic business methods such as getting the date and time") 
@Named() 
public class ServerSessionBean implements ServerSessionBeanLocal { 
    @Override 
    public int getTime() { 
     return Calendar.getInstance().get(Calendar.SECOND); 
    }  
} 

回答

0

对于表达式语言(EL)表达式JSF,EJB不可见。 您可以使用JSF管理豆和注入EJB或与@Named注解该EJB使得EJB立即表达式语言(EL)表达式JSF可见。 此@Named注释采用带注释的类的简单名称,将第一个字符设置为小写,并将其直接公开给页面上的JSF页面。可以通过页面直接访问EJB,而不需要任何支持或受管理的Bean。

其次,您在同一ejb中使用了两种符号来指定不同类型的会话bean(@Singleton/@Stateless)。

例如,

EJB:

package com.incredibleifs; 

import javax.ejb.Stateless; 
import java.util.Calendar; 
import javax.ejb.Singleton; 

@Stateless 
@Named("serverSessionBean") 
public class ServerSessionBean implements ServerSessionBeanLocal { 
    @Override 
    public int getTime() { 
     return Calendar.getInstance().get(Calendar.SECOND); 
    }  
} 

XHTML文件:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html"> 
    <h:head> 
     <title></title> 
    </h:head> 
    <h:body> 
     The current server time is: 
     <h:outputText binding="#{serverSessionBean.time}"/> 
    </h:body> 
</html> 

注意名称是serverSessionBean与小写的第一个字符。

参见:

+0

添加注释命名失败,甚至消除单/无国籍注释之后。我仍然收到空引用。我编辑了我的帖子,指出我正在使用java EE 7 - 我不确定6和7是多么不同 - 尽管我收集的内容已经不一样了。 – 2014-11-08 19:37:18

+0

@RichardBarker Java EE 7和6之间存在差异,但在这种情况下应用了答案,请参阅我的更新可能会帮助您解决问题。 – 2014-11-08 20:15:44

+0

我编辑了我的代码以匹配我目前拥有的代码。但它仍然失败。 – 2014-11-08 21:50:13

相关问题