2012-04-13 111 views
0

我有一个奇怪的问题。我在我的web应用程序中使用了JSF 2.1.7(最新版本),并且我有一个JSF必须在每个会话中管理的bean。这是我的豆代码:JSF bean访问失败

public abstract class NavegableManager<E> implements INavegableManager<E> { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

// Propiedad que controla la habilitación-desabilitación de los botones de navegación 
private boolean _DisableNavigationButtons; 

/** 
* 
*/ 
private final Stack<INavegable<E>> _NavegableStack; 

/** 
* Constructor 
*/ 
public NavegableManager() { 
    super(); 
    this._NavegableStack = new Stack<INavegable<E>>(); 
} 

/** 
* Limpia los navegables almacenados en el manager y se quita de la sesión 
* 
* @throws Throwable 
*/ 
public void clear() throws Throwable { 
    while (!this._NavegableStack.isEmpty()) { 
     INavegable<E> nav = this._NavegableStack.pop(); 
     nav.clear(); 
    } 
} 

/* 
* (non-Javadoc) 
* 
* @see 
* com.tesicnor.navigator.event.INavegableListener#eventNewNavegable(com.tesicnor.navigator.event.NavegableEvent) 
*/ 
@Override 
public void eventNewNavegable(NavegableEvent event) throws NavegableServiceException { 
    if (event.getNavegable() != null) { 
     // Se asigna al navegable el mismo servicio que el navegable anterior 
     event.getNavegable().set_Service(this._NavegableStack.peek().get_Service()); 
     this.push(event.getNavegable()); 
    } 
} 

/* 
* (non-Javadoc) 
* 
* @see 
* com.tesicnor.navigator.event.INavegableListener#eventRemoveNavegable(com.tesicnor.navigator.event.NavegableEvent) 
*/ 
@Override 
public void eventRemoveNavegable(NavegableEvent event) { 
    if (this._NavegableStack.contains(event.getSource())) { 
     boolean mustUnFreezePeek = event.getSource() == this._NavegableStack.peek(); 
     this._NavegableStack.remove(event.getSource()); 
     event.getSource().unRegister(this); 
     event.getSource().clear(); 

     if (mustUnFreezePeek && !this._NavegableStack.isEmpty()) 
      this._NavegableStack.peek().unFreeze(); 
    } 
} 

/* 
* (non-Javadoc) 
* 
* @see 
* com.tesicnor.navigator.event.INavegableListener#eventSelectNavegable(com.tesicnor.navigator.event.NavegableEvent) 
*/ 
@Override 
public void eventSelectNavegable(NavegableEvent event) throws NavegableServiceException { 
    while (!this._NavegableStack.isEmpty() && !this._NavegableStack.peek().equals(event.getSource())) 
     this.pop(); 
    if (this._NavegableStack.isEmpty()) 
     this.push(event.getSource()); 
    this.get_Navegable().unFreeze(); 
} 

@Override 
public synchronized INavegable<E> get_Navegable() { 
    if (!this._NavegableStack.isEmpty()) 
     return this._NavegableStack.peek(); 
    else 
     return null; 
} 

@Override 
public List<INavegable<E>> get_Navegables() { 
    return this._NavegableStack.subList(0, this._NavegableStack.size() - 1); 
} 

public boolean is_DisableNavigationButtons() { 
    return this._DisableNavigationButtons; 
} 

/** 
* 
* @return 
*/ 
public boolean is_init() { 
    return true; 
} 

/** 
* Indica si debe mostrarse el menu de navegacion. Solo se muestra si hay más de 1 elemento de navegacion 
* 
* @return 
*/ 
public boolean is_ShowNavegacion() { 
    return this._NavegableStack.size() > 1; 
} 

/* 
* (non-Javadoc) 
* 
* @see com.tesicnor.navigator.INavegableManager#isInit() 
*/ 
@Override 
public boolean isInit() { 
    return false; 
} 

/** 
* 
* @throws EmptyStackException 
*/ 
private synchronized void pop() throws EmptyStackException { 
    INavegable<E> peek = this._NavegableStack.pop(); 
    peek.unRegister(this); 
    peek.clear(); 
} 

/* 
* (non-Javadoc) 
* 
* @see com.tesicnor.navigator.INavegableManager#push(com.tesicnor.navigator.INavegable) 
*/ 
private synchronized void push(INavegable<E> navegable) throws NavegableServiceException { 
    INavegable<E> peek = this.get_Navegable(); 
    navegable.register(this); 
    this._NavegableStack.push(navegable); 
    if (peek != null) 
     peek.freeze(); 
} 

/** 
* Propiedad que controla la habilitación-desabilitación de los botones de navegación 
* 
* @param _disableNavigationButtons 
*/ 
public void set_DisableNavigationButtons(boolean _disableNavigationButtons) { 
    this._DisableNavigationButtons = _disableNavigationButtons; 
} 

/* 
* (non-Javadoc) 
* 
* @see com.tesicnor.navigator.INavegableManager#setNavegable(com.tesicnor.navigator.INavegable) 
*/ 
@Override 
public void setNavegable(INavegable<E> navegable) throws NavegableServiceException { 
    while (!this._NavegableStack.isEmpty()) 
     this.pop(); 
    this.push(navegable); 
} 

} 

我在使用UI中的XHTML页面做一个迭代:重复的标签,这里是这里的怪东西亮起。正如你所看到的,我有我的getters在变量的名字之前定义一个非内核。我的XHTML表明这样的:

<h:form> 
    <!--   <p:queue requestDelay="1" ignoreDupResponce="true" /> --> 
    <h:panelGroup id="navigationPanel"> 
     <!-- Comprobar si está activada la deshabilitación de los botones de navegación --> 
     <h:panelGroup 
      rendered="#{!navigationManager._DisableNavigationButtons}"> 
      <ui:repeat value="#{navigationManager._Navegables}" var="item"> 
       <p:commandButton value="#{item._Title}" 
        action="#{item.actionSelected}" update="#{reRenderOnSelect}" /> 
      </ui:repeat> 
      <p:commandButton disabled="true" 
       value="#{navigationManager._Navegable._Title}" /> 
     </h:panelGroup> 
     <h:panelGroup 
      rendered="#{navigationManager._DisableNavigationButtons}"> 
      <ui:repeat value="#{navigationManager._Navegables}" var="item"> 
       <p:commandButton value="#{item._Title}" 
        listener="#{item.actionSelected}" update="#{reRenderOnSelect}" 
        disabled="true" />--> 
      </ui:repeat> 
      <p:commandButton disabled="true" 
       value="#{navigationManager._Navegable._Title}" /> 
     </h:panelGroup> 

    </h:panelGroup> 
</h:form> 

如果我使用给定的代码它的工作没有任何问题,但如果我折射get_Navegabes和更改方法名getNavegables,无下划线,并在XHTML页面做同样的,它的给我下一个错误:

/system/navigation/navigation.xhtml @17,67 value="#{navigationManager.Navegables}": Property 'Navegables' not found on type com.tesicnor.system.view.navigation.NavigationManagerSystem 

所以JSF找不到属性。它发生在我在这个页面中使用的每一个吸气剂,不知道为什么。有人试验过类似的问题吗?

+0

顺便说一句,我确定在界面中正确使用getter方法... – 2012-04-13 07:04:17

回答

1

值= “#{} navigationManager.Navegables” 是错误的, “N” 不应该是大写,而不是使用:值= “#{} navigationManager.navegables”