Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Jsf 像@ManagedProperty和@PostConstruct这样的Bean注释不';当从另一个bean手动实例化bean时,它不起作用_Jsf_Jsf 2_Annotations_Managed Bean - Fatal编程技术网

Jsf 像@ManagedProperty和@PostConstruct这样的Bean注释不';当从另一个bean手动实例化bean时,它不起作用

Jsf 像@ManagedProperty和@PostConstruct这样的Bean注释不';当从另一个bean手动实例化bean时,它不起作用,jsf,jsf-2,annotations,managed-bean,Jsf,Jsf 2,Annotations,Managed Bean,我从另一个请求bean实例化了一个请求bean new LoginManager(); 但是,使用@ManagedProperty注释的属性不会从请求的引用中获取值,只有在通过上述方式实例化的情况下才可以。它只包含null,导致代码后面出现NPE。另外,@PostConstruct也不会被调用。为什么会这样&我应该如何处理 @ManagedBean(name = "loginManager") @RequestScoped public class LoginManager { pr

我从另一个请求bean实例化了一个请求bean

new LoginManager();
但是,使用
@ManagedProperty
注释的属性不会从请求的引用中获取值,只有在通过上述方式实例化的情况下才可以。它只包含
null
,导致代码后面出现NPE。另外,
@PostConstruct
也不会被调用。为什么会这样&我应该如何处理

@ManagedBean(name = "loginManager")
@RequestScoped
public class LoginManager {

    private String userid;
    private String password;

    @ManagedProperty(value="#{currentSession}")
    private UserSessionManager userSession;

}
但是
userSession
无法从会话范围的bean中读取,因为该bean是使用以下命令实例化的:
new LoginManager()


但是,我可以使用
FacesContext
读取值

您不应该使用
new
操作符手动实例化(管理)bean。您应该让JSF来管理bean,而不是获取JSF托管(JSF实例化)实例

通过bean中您需要的
@ManagedProperty

@ManagedProperty("#{loginManager}")
private LoginManager loginManager;
或者通过编程方式调用EL(在您的特定情况下,这非常接近):

如果您坚持自己实例化和管理bean,那么您应该自己进行所有依赖注入,也可以自己调用
@PostConstruct
,如果有的话,最后还可以自己将bean放入所需的范围。例如

LoginManager loginManager = new LoginManager();
loginManager.setUserSession(userSession);
// Now use reflection to find and invoke @PostConstruct method.
// Finally store in the map which conforms the bean's scope.
externalContext.getRequestMap().put("loginManager", loginManager);

这个样板正是JSF应该从您手中拿走的东西。利用它。

您不应该使用
new
操作符手动实例化(管理)bean。您应该让JSF来管理bean,而不是获取JSF托管(JSF实例化)实例

通过bean中您需要的
@ManagedProperty

@ManagedProperty("#{loginManager}")
private LoginManager loginManager;
或者通过编程方式调用EL(在您的特定情况下,这非常接近):

如果您坚持自己实例化和管理bean,那么您应该自己进行所有依赖注入,也可以自己调用
@PostConstruct
,如果有的话,最后还可以自己将bean放入所需的范围。例如

LoginManager loginManager = new LoginManager();
loginManager.setUserSession(userSession);
// Now use reflection to find and invoke @PostConstruct method.
// Finally store in the map which conforms the bean's scope.
externalContext.getRequestMap().put("loginManager", loginManager);

这个样板正是JSF应该从您手中拿走的东西。利用它。

完美!非常感谢你!在这两种方法中(使用@ManagedProperty&
evaluateExpressionGet
),如果bean已经存在,那么它们将被检索到,对吗?所以我甚至不需要检查bean是否已经实例化过&我可以直接使用,对吗?这是正确的。JSF只会在范围中不存在的情况下创建它,否则它只会返回现有的实例。完美!非常感谢你!在这两种方法中(使用@ManagedProperty&
evaluateExpressionGet
),如果bean已经存在,那么它们将被检索到,对吗?所以我甚至不需要检查bean是否已经实例化过&我可以直接使用,对吗?这是正确的。JSF只会在范围中还不存在的情况下创建它,否则它只会返回现有实例。