2016-06-12 6 views
0

In meiner XHTML-Seite rufe ich eine Methode aus meiner @ManagedBean-Klasse. Das Verfahren sollte nur dann ausgeführt werden, wenn ich auf den Link klicken, der das Verfahren verknüpft ist:Wie kann automatische Methodenaufruf von @ManagedBean-Klasse auf Seite aktualisieren gestoppt werden, JSF

<h:link value="Continue Reading &raquo;" 
     outcome="contracts/resources/data/imag2_facebook.html" 
onclick="#{sessionFilter.incForLink2('contracts/resources/imagini/facebook.jpg','Facebook down? Current problems and status', 'contracts/resources/imagini/facebook.jpg')}" /> 

Es ist seltsam, warum die Methode bei jeder Aktualisierung der Seite ausgeführt wird, auf dem Link ohne klicken. Ich möchte, dass die Methode nur ausgeführt wird, wenn ich auf den Link klicke. Ich habe auch mit h: commandLink versucht, aber die Ergebnisse sind die gleichen. Hast du eine Idee, was ich ändern muss oder was ist falsch? Die @ManagedBean-Klasse ist Anwendungsbereich. Die Methode, die ich nenne, ist folgende:

public void incForLink2(String link, String title, String imgAllLink) { 
    Article article = links.get(link); 
    if (article != null) { 
     Integer pageHits = article.getPageHits(); 
     article.setPageHits(pageHits + 1); 
     System.out.println(link + " = " + pageHits); 
    } else { 
     Article article1 = new Article(1, title, link, imgAllLink); 
     links.put(link, article1); 
    } 
} 
+0

Ich muss das Duplikat finden, aber es ist, weil, wenn Sie EL in etwas anderes als eine Aktionsmethode enthalten, es beim Laden der Seite aufgerufen wird, um das HTML zu rendern. Ein onclick ist keine Aktionsmethode im jsf Sinne, (es ist Art im HTML Kontext) – Kukeltje

+0

Mögliches Duplikat von [JSF Seite onload führt Knopfdruck aus] (http://stackoverflow.com/questions/25704443/jsf-page -onload-executes-button-click) – Kukeltje

+0

Danke für die Antwort @Kukeltje, ich werde versuchen, zu ändern und wiederkommen, wenn es mit h funktioniert: commandButton –

Antwort

-1

onClick ist ein Handler für JavaScript im Browser! Die Methode, die Sie aufrufen, ist Java und wird auf dem Server ausgeführt!

Java rendert die Website, bevor die Website an den Webbrowser gesendet wird. In dieser Phase wird die Methode aufgerufen. Nach dem Senden an den Webbrowser kann das Javascript ausgeführt werden, dies ist eine zweite Phase. Sie benötigen lediglich eine neue Anfrage an den Server, um Java-Methoden auszuführen. Ich bevorzuge es, a4j:jsFunction zu verwenden.

+1

Genau das ist in den Duplikaten angegeben, auf die ich Bezug genommen habe oder habe ich etwas übersehen? Und 'h: link' wurde in JSF2 eingeführt, so dass ein' f: ajax' anstelle des a4j verwendet werden kann, das vor dem Datum liegt. Und afaics gibt es keine Notwendigkeit, hier einen Ajax-Aufruf zu verwenden. Ein 'commandLink' wäre ausreichend, da das OP eine Seitennavigation durchführen möchte. – Kukeltje

+0

@Kukeltje Sie haben 2 mögliche Duplikate kommentiert, die es mir erlauben, für Duplikate zu stimmen. –

+0

@Kukeltje es funktioniert mit h: commandLink, ich musste auch ändern, wie ich die Seite weitergab. Jetzt mache ich die Seite vorwärts von meiner Java-Klasse und ich rufe die Methode von h: commandLink mit dem action-Attribut auf. Danke für die Antwort! –

Verwandte Themen