2010-11-25 8 views
4

Ich muss 2 verschiedene ManagedProperty für die gleiche Bean festlegen. Also habe ich versucht:JSF - Legen Sie mehrere Werte auf @ManagedProperty in einer einzigen Bean

@ManagedBean(name="selector") 
@RequestScoped 
public class Selector { 
    @ManagedProperty(value="#{param.page}") 
    @ManagedProperty(value="#{param.profile_page}") 
    private String page; 
    private String profile_page; 

    public String getProfile_page() { 
     if(profile_page==null || profile_page.trim().isEmpty()) { 
      this.profile_page="main"; 
     } 
     return profile_page; 
    } 
    public void setProfile_page(String profile_page) { this.profile_page = profile_page; } 

    public String getPage() { 
     if(page==null || page.trim().isEmpty()) { 
      this.page="homepage"; 
     } 
     return page; 
    } 
    public void setPage(String page) { this.page=page; } 
} 

aber leider kann ich nicht 2 verschiedene @ManagedProperty schreiben: es sagt Anmerkungen duplizieren. Wie kann ich es reparieren?

Ein anderes: wenn ich diesen Wert zurückgebe, ist es ein String, und ich muss konfrontieren. Diese Syntax:

<h:panelGroup rendered="#{selector.profile_page.compareTo("main")}"> 
    <ui:include src="/profile/profile_main.xhtml" /> 
</h:panelGroup> 

wird funktionieren?

Prost

Antwort

10

Die Anmerkungen müssen direkt vor der Klasse, Methode oder Interessengebiet deklariert werden.

So:

@ManagedProperty(value="#{param.page}") 
private String page; 

@ManagedProperty(value="#{param.profile_page}") 
private String profile_page; 
+0

Perfect !!! +1 wie üblich :) Über die damit verbundene Frage? Kann ich diese Syntax verwenden? Sieht so aus, als ob nichts passieren würde ... – markzzz

+4

Verwende 'rendered =" # {selector.profile_page == 'main'} "' stattdessen. Weitere Beispiele für gültige boolesche Ausdrücke in EL finden Sie in [diese Antwort] (http://stackoverflow.com/questions/3466289/how-to-enable-disable-components-in-jsf-icefaces/3466918#3466918). – BalusC

+0

Danke nochmal :) – markzzz