2012-04-13 11 views
0

Ich habe ein seltsames Problem. Ich verwende JSF 2.1.7 (das neueste) in meiner Web-App, und ich habe eine Bean, die JSF pro Sitzung verwalten muss. Das ist mein Bean-Code:JSF Bean Zugriff fehlgeschlagen

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); 
} 

} 

ich eine Iteration in einer xhtml Seite machte mit ui: repeat-Tag, und hier ist, wo die seltsamen Sachen auf kommen. Wie Sie sehen können, habe ich meine Getter mit einem Uncore vor dem Namen der Variablen definiert. Mein xhtml zeigt wie folgt aus:

<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> 

Wenn ich Code gegeben verwenden es ohne Probleme funktioniert, aber wenn ich get_Navegabes Refraktor und den Methodennamen ohne Unterstrich getNavegables, ändern, und tut das gleiche in der XHTML-Seite, es ist gibt mir den nächsten Fehler:

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

So JSF kann die Eigenschaft nicht finden. Es passiert jedem einzelnen Getter, den ich auf dieser Seite benutze, weiß nicht warum. Hat jemand ein ähnliches Problem experimentiert?

+0

By the way, ich definiere Getter-Methoden richtig in der Schnittstelle ... –

Antwort

1

value = "# {navigationManager.Navegables}" ist falsch, "N" statt nicht groß geschrieben werden sollte, verwenden Sie diese: value = "# {navigationManager.navegables}"

Verwandte Themen