当前位置: 首页 > 面试题库 >

在JSF 2.0中注入Bean

宁弘亮
2023-03-14
问题内容

我有一个会话范围的bean

import javax.faces.bean.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class SessionBean implements Serializable{

我在一个过滤器中注入了对象…

public class FiltroSeguridad implements Filter{

@Inject
private SessionBean sessionBean;

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  HttpServletRequest httpRequest = (HttpServletRequest) request;
  sessionBean.setRutaRedirect(httpRequest.getRequestURI());
}
}

但是,我在下一次交互中融合了SessionBean …

@Model
public class CuentaUsuarioWebBean implements Serializable{
 @Inject
 private SessionBean sessionBean;

public void loginUsuario() throws IOException{
   sessionBean.getRutaRedirect();
}

}

但是该属性getRutaRedirect()返回null

我通过CDI注释更改了导入,但仍然无法使用(javax.enterprise.context.SessionScoped),与JSF注释(javax.faces.bean.ManagedBean@ManagedProperty)相同。

谢谢。

PD:对不起,我的英语!


问题答案:

您不能将javax.faces.bean.SessionScoped用于JSF和import javax.inject.NamedCDI的这两个包中的注释混合在一起。两者都反映了不同的注入机制,因此不能在同一bean上混合使用。您必须从同一程序包中选择两个注解(用于注入和Bean范围限定)。使用以下对应套件中的套件

对于基于CDI的bean定义

javax.enterprise.context.SessionScoped //for bean scoping
javax.inject.Named //for bean declaration
javax.inject.Inject //for injection

对于基于JSF的bean定义

javax.faces.bean.SessionScoped //for bean scoping
javax.faces.bean.ManagedBean //for bean declaration
javax.faces.bean.ManagedProperty //for bean injection

编辑:现在,我更好地了解了您的需求,使用以下构造注入JSF托管bean

 @ManagedProperty(value="#{yourBeanName}")
 SessionBean yourSessionBean;

还要注意,在JSF中,您只能注入范围比其目标范围更广的bean,例如,可以将@SessionScopedbean注入@RequestScopedbean中,而不能以其他方式注入

但是由于不建议使用JSF托管bean,因此最好使用CDI托管bean。在这种情况下,您 可以 将范围较小的Bean注入范围较大的Bean



 类似资料:
  • 这可能是一个很难回答的问题,但是在很多教程和示例中,我看到这些注释的使用就好像它们做了同样的事情。 但是,我使用时遇到了一些限制(尤其是依赖注入等),我找不到解释差异的源,如果有人能给出一个大致的概述,说明什么时候使用这两个,我将非常感谢。

  • 问题内容: 我那里有点问题。当我想在JSF中填充DataTable时,我必须先创建一个模型,然后在我的视图中使用它。就像这里的 Primefaces示例一样。 现在,我必须创建DataTable来显示来自Web服务的数据。我不知道会有多少列,我也不知道它们的名称…您能推荐一些明智的解决方案吗? PS。我也不知道如何从Web服务中返回数据-尚待确定。 编辑 问题答案: 收集中代表属性的数据。的表示列

  • 在我的应用程序中,用户应该能够切换区域设置(用于在页面上呈现文本的语言)。大量教程使用FacesContext.get货币实例()。getViewRoot()。setLocale()。例如:http://www.mkyong.com/jsf2/jsf-2-internationalization-example/.但是,这在JSF 2.0中根本不起作用(它在1.2中确实起作用)。这种语言从不切换。

  • 问题内容: 我的测试课: 我在行上得到一个空指针异常: 在精确的给出空指针异常 如何使Junit类中的beanObject字段自动装配成为可能,以便可以使用“ BeanClass”类中的方法? 从评论中复制: 用简单的术语来说.. beanClass是具有某些方法的接口..我用 注释标记了该beanClass。.banClass 是由具有方法实现的beanClassImpl类实现的。.我需要在我的

  • 问题内容: 我们将对使用JSF2.0,Hibernate,MySQL设计的Web应用程序启用UTF-8字符编码。 以下是我们的应用程序上下文文件中定义的数据源 在运行应用程序时,我们遇到异常 我们也尝试使用以下方法,但出现错误 问题答案: 经过一些解决后,我能够处理该问题-以下是对我有用的代码,以启用与UTF8一起使用的JDBC 配合使用达到目的 为了能够与Hibernate一起使用,还应在hib