2010-11-25 4 views
3

Ich muss eine Art Schalter von einigen panelGroup UI machen. über den Ansichtsbereich, i dies gemacht:JSF - Ändern panelGroup mit Ajax Anrufe - Bohnen, EL und?

<h:panelGroup layout="block" id="profile_content"> 
    <h:panelGroup layout="block" styleClass="content_title"> 
     Profilo Utente 
    </h:panelGroup> 

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

    <h:panelGroup rendered="#{selector.profile_page=='edit'}"> 
     <ui:include src="/profile/profile_edit.xhtml" /> 
    </h:panelGroup> 

    <h:panelGroup rendered="#{selector.profile_page=='insert'}"> 
     <ui:include src="/profile/profile_articles.xhtml" /> 
    </h:panelGroup> 
</h:panelGroup> 

nun diesen Wert zu ändern, ich eine exklusive JavaBean geschrieben, Selector genannt:

@ManagedBean(name="selector") 
@RequestScoped 
public class Selector { 
    @ManagedProperty(value="#{param.profile_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; } 
} 

Also mein Problem, gelingt es jetzt: wenn i Ändern Sie den "Kontext" mit einigen h:commandButton, ich möchte asynch Aufruf an den Server verwenden. Das ist mein Button Panel:

<h:commandButton value="EDIT"> 
    <f:ajax event="action" execute="???" render=":profile_content"/> 
</h:commandButton> 

<h:commandButton value="PM"> 
    <f:ajax event="action" execute="???" render=":profile_content"/> 
</h:commandButton> 

<h:commandButton value="ARTICLES"> 
    <f:ajax event="action" execute="???" render=":profile_content"/> 
</h:commandButton> 

Ich weiß nicht, was auf execute, setzen, so dass ich den Wert Beans bearbeiten und ich den Kontext ändern, indem render=":profile_content"

Hoffnung diese Frage comprehendible verwendet. Verzeihen Sie mir über die Sprache :)

Prost

Antwort

2

Verwenden f:setPropertyActionListener. Sie müssen nicht den Standardwert f:ajax 's execute Attribut (das ist @this, der einzige Button) überschreiben.

z.

<h:commandButton value="EDIT"> 
    <f:setPropertyActionListener target="#{selector.profile_page}" value="edit" /> 
    <f:ajax event="action" render=":profile_content"/> 
</h:commandButton> 

Beachten Sie, dass die Java Coding Conventions Camelcase über under_score empfiehlt. Ich würde vorschlagen, profile_page zu profilePage zu beheben. Dies ist Java, nicht PHP.

+0

Danke für den Vorschlag über CamelCase. Ja, das funktioniert. Das finde ich komisch, dass wenn ich entferne, es eine normale Anfrage an den Server macht (Seite wird neu geladen). Ansonsten, wenn ich hinzufüge, arbeitet der vorherige ActionListener als asynch. Seltsames Verhalten, ich muss lernen, warum das passiert :) – markzzz

+2

Das ist der ganze Sinn von 'f: ajax'. Um es in asynchrone (ajaxische) Submit zu ändern. – BalusC

+0

Sie sind ein Experte von JSF! Wie schon oft gesagt, Danke nochmal! Ich denke du verdienst 1-10 Biere :) – markzzz