标签: managed-bean

如何选择合适的bean范围?

我注意到有不同的bean范围,如:

@RequestScoped
@ViewScoped
@FlowScoped
@SessionScoped
@ApplicationScoped
Run Code Online (Sandbox Code Playgroud)

每个人的目的是什么?如何为我的bean选择合适的范围?

jsf scope jsf-2 managed-bean

372
推荐指数
2
解决办法
20万
查看次数

BeanFactory与ApplicationContext

我是Spring Framework的新手,我一直在玩它并将一些示例应用程序放在一起,以便评估Spring MVC以用于即将到来的公司项目.到目前为止,我非常喜欢我在Spring MVC中看到的内容,看起来非常容易使用,并鼓励您编写非常适合单元测试的类.

就像练习一样,我正在为我的一个示例/测试项目编写一个主要方法.我不清楚的一件事是BeanFactory和之间的确切差异ApplicationContext- 适合在哪些条件下使用?

我理解ApplicationContext扩展BeanFactory,但如果我只是编写一个简单的主方法,我是否需要ApplicationContext提供额外的功能?究竟是什么类型的额外功能ApplicationContext提供了?

除了回答"我应该在main()方法中使用哪个"之外,对于在这种情况下我应该使用哪种实现,是否有任何标准或指南?我的main()方法是否应该依赖于bean /应用程序配置以XML格式编写 - 这是一个安全的假设,还是我将用户锁定为特定的东西?

这个答案是否会在网络环境中发生变化 - 如果我的任何课程需要了解Spring,他们是否更有可能需要ApplicationContext

谢谢你的帮助.我知道很多这些问题可能在参考手册中得到了解答,但是我很难找到这两个界面的明确细分以及每个界面的优点/缺点而不通过精细梳齿阅读手册.

spring managed-bean applicationcontext

221
推荐指数
12
解决办法
22万
查看次数

识别并解决javax.el.PropertyNotFoundException:Target Unreachable

当尝试在EL中引用托管bean时#{bean.entity.property},有时会javax.el.PropertyNotFoundException: Target Unreachable抛出异常,通常是在设置bean属性时,或者要调用bean操作时.

似乎有五种不同的消息:

  1. 目标无法访问,标识符'bean'已解析为null
  2. 目标无法访问,'entity'返回null
  3. 目标无法访问,'null'返回null
  4. 目标无法访问,''0'返回null
  5. 目标无法访问,'BracketSuffix'返回null

这些都意味着什么?它们是如何引起的,它们应该如何解决?

jsf el cdi managed-bean propertynotfoundexception

117
推荐指数
2
解决办法
11万
查看次数

在任何与Servlet相关的类中按名称获取JSF托管bean

我正在尝试编写一个自定义servlet(用于AJAX/JSON),我想在其中引用我@ManagedBeans的名字.我希望能够映射:

http://host/app/myBean/myProperty

至:

@ManagedBean(name="myBean")
public class MyBean {
    public String getMyProperty();
}
Run Code Online (Sandbox Code Playgroud)

是否可以从常规servlet中按名称加载bean?是否有我可以使用的JSF servlet或帮助程序?

我似乎被春天宠坏了,这一切都太明显了.

jsf servlets java-ee jsf-2 managed-bean

98
推荐指数
2
解决办法
15万
查看次数

ViewParam vs @ManagedProperty(value ="#{param.id}")

定义View Params之间有什么区别:

<f:metadata>
  <f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

并在ManagedBean中定义属性,如下所示:

@ManagedProperty(value = "#{param.id}")
private Integer id;
Run Code Online (Sandbox Code Playgroud)

jsf jsf-2 managed-bean viewparams managed-property

95
推荐指数
2
解决办法
5万
查看次数

托管bean和辅助bean之间的区别

我在几个论坛中遇到了"托管bean"和"支持bean"的术语.很多人认为两者都是一样的.但是,似乎有一点点差异.任何人都可以帮助我理解这两个术语之间的确切区别吗?

jsf javabeans managed-bean backing-beans

61
推荐指数
4
解决办法
7万
查看次数

如何在JSF 2.0中使会话无效?

在JSF 2.0应用程序中使会话无效的最佳方法是什么?我知道JSF本身不会处理会话.到目前为止我能找到

private void reset() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
            .getExternalContext().getSession(false);
    session.invalidate();
}
Run Code Online (Sandbox Code Playgroud)
  1. 这种方法是否正确?有没有办法没有触及ServletAPI?
  2. 考虑一种方案,其中@SessionScopedUserBean处理用户的登录注销.我在同一个bean中有这个方法.现在,当我reset()完成必要的数据库更新后调用该方法时,我当前的会话作用域bean会发生什么?既然豆本身也存放在HttpSession

session session-scope httpsession jsf-2 managed-bean

58
推荐指数
2
解决办法
8万
查看次数

在页面加载时调用JSF托管bean操作

有没有办法在加载页面时执行JSF托管bean操作?

如果那是相关的,我现在正在使用JSF 1.2.

jsf action onload managed-bean

57
推荐指数
3
解决办法
10万
查看次数

Spring JSF集成:如何在JSF托管bean中注入Spring组件/服务?

我知道托管bean的工作方式类似于控制器,因为您唯一的任务是将视图层与模型"链接"起来.

要使用bean作为托管bean,我必须声明@ManagedBean注释,这样做我可以直接与bean通信JSF.

如果我想在这个managedBean中注入一些组件(来自Spring),我有两种可能的方法:

  1. 在ManagedBean中选择属性(如"BasicDAO dao")并@ManagedProperty(#{"basicDAO"})在属性上方声明.这样做,我"basicDAO"在ManagedBean中从Spring 注入bean .

  2. 在ManagedBean Class中声明了@Controller,然后我将拥有@ManagedBean@Controller注释一起.在物业中"BasicDAO dao"我必须使用@AutowiredSpring.

我的理解是否正确?

integration jsf spring dependency-injection managed-bean

39
推荐指数
2
解决办法
3万
查看次数

获取CDI托管bean实例的典型方法:BeanManager#getReference()vs Context#get()

我认为有两种通用方法可以获得一个自动创建的CDI托管bean实例BeanManager,只需要一个Bean<T>开始(基于它创建Class<T>):

  1. 通过BeanManager#getReference(),更经常以片段形式显示:

    Bean<TestBean> bean = (Bean<TestBean>) beanManager.resolve(beanManager.getBeans(TestBean.class));
    TestBean testBean1 = (TestBean) beanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过Context#get(),在片段中不常显示:

    Bean<TestBean> bean = (Bean<TestBean>) beanManager.resolve(beanManager.getBeans(TestBean.class));
    TestBean testBean2 = beanManager.getContext(bean.getScope()).get(bean, beanManager.createCreationalContext(bean));
    
    Run Code Online (Sandbox Code Playgroud)

实际上,它们最终完全相同:返回对当前CDI托管bean实例的代理引用,并自动创建bean实例(如果范围中尚不存在).

但是他们做的有点不同:BeanManager#getReference()总是创建一个全新的代理实例,而Context#get()如果之前已经创建过,则重用现有的代理实例.当在现有TestBean实例的action方法中执行上述代码时,这是显而易见的:

System.out.println(testBean1 == testBean2); // false
System.out.println(testBean1 == this); // false
System.out.println(testBean2 == this); // true
Run Code Online (Sandbox Code Playgroud)

的javadocContext#get()是非常明确的在此:

返回某个上下文类型的现有实例,或通过调用Contextual.create(CreationalContext)创建一个新实例并返回新实例.

javadoc中BeanManager#getReference()不够明确在此:

获得某个bean和bean的某个bean类型的上下文引用.

这让我感到困惑.你什么时候使用这一个?对于这两种方式,无论如何都需要一个Bean<T>实例,bean类和bean范围随时可用,这是额外的参数.我无法想象为什么在这种特殊情况下他们需要外部供应.

我可以想象这Context#get()是更高效的内存,因为它不会不必要地创建引用同一个底层bean实例的另一个代理实例,而只是查找并重用现有的代理实例.

这让我想到了以下问题:什么时候BeanManager#getReference() …

cdi managed-bean

38
推荐指数
1
解决办法
1万
查看次数