Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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
Java Can';无法从SessionScoped bean获取viewScoped bean_Java_Jsf_Managed Bean_View Scope_Session Scope - Fatal编程技术网

Java Can';无法从SessionScoped bean获取viewScoped bean

Java Can';无法从SessionScoped bean获取viewScoped bean,java,jsf,managed-bean,view-scope,session-scope,Java,Jsf,Managed Bean,View Scope,Session Scope,我需要从sessionScoped托管bean获取一个viewScoped托管bean。我首先尝试使用@ManagedProperty注释,但我立即发现它不起作用,我知道原因。其次,我尝试使用以下方法: Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap(); PulsantieraBean pulsantiera = (PulsantieraBean)

我需要从sessionScoped托管bean获取一个viewScoped托管bean。我首先尝试使用@ManagedProperty注释,但我立即发现它不起作用,我知道原因。其次,我尝试使用以下方法:

Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();   
PulsantieraBean pulsantiera = (PulsantieraBean) viewMap.get("#{pulsantiera}");
而我在其中执行请求的类声明如下

@SessionScoped
@ManagedBean(name = NomeBean.IDF_TAB_IMPORTI)
public class IdfTabImportiBean extends ControllerBaseBean implements Serializable {
我在一个方法中执行请求,我确信ViewScope托管beanPulsantieraBean存在

任何帮助都将不胜感激。 谢谢 马可

从ListADFacturasMB调用ControladorMB

@Named(value = "listadoFacturasMB")
@SessionScoped
public class ListadoFacturasMB implements Serializable {

public void example() {
    try {
        FacesContext ctx = FacesContext.getCurrentInstance();
        ValueExpression vex =ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(), "#{controladorMB}", ControladorMB.class);
        ControladorMB gMB = (ControladorMB) vex.getValue(ctx.getELContext());
       } catch (Exception e) {
        JsfUtil.addErrorMessage(e, "Error: buscarPersonalizado() " + e.getMessage());
       }
   }
}

我不确定viewMap是否接受EL表达式,您是否尝试过viewMap.get(NomeBean.PULSANTIERA)?或者使用EL表达式解析器:确切地说,为什么需要从SessionScoped bean访问ViewScoped bean?老实说,这听起来像是个设计问题。更符合逻辑的是,如果是相反的方式,那么您可以从视图范围的bean访问会话范围的bean?过去(在Mojarra中)有许多与@ViewScope注释相关的bug。实际上我没有绝对的必要这样做。这是一个做我必须做的事情的想法,但显然我有其他的方法去做。最重要的是,我甚至尝试传递NomeBean.PULSANTIERA值,因为您是对的,但我没有解决问题。问题是viewMap对象只包含另一个ViewScope托管bean,但不是我想要的。我已经知道如何让两个SessionScope托管bean相互通信
@Named(value = "controladorMB")
@SessionScoped
public class ControladorMB implements Serializable {}
@Named(value = "listadoFacturasMB")
@SessionScoped
public class ListadoFacturasMB implements Serializable {

public void example() {
    try {
        FacesContext ctx = FacesContext.getCurrentInstance();
        ValueExpression vex =ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(), "#{controladorMB}", ControladorMB.class);
        ControladorMB gMB = (ControladorMB) vex.getValue(ctx.getELContext());
       } catch (Exception e) {
        JsfUtil.addErrorMessage(e, "Error: buscarPersonalizado() " + e.getMessage());
       }
   }
}