2016-06-12 4 views
0

내 XHTML 페이지에서 @ManagedBean 클래스의 메소드를 호출하고 있습니다. 방법은 링크를 클릭하지 않고 모든 페이지 새로 고침에서 실행되는 이유페이지 새로 고침, JSF에서 @ManagedBean 클래스에서 자동 메소드 호출을 중단하는 방법

<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')}" /> 

그것은 이상한 : 나는 방법을 연결되어있는 링크를 클릭하면 메소드는 실행해야합니다. 링크를 클릭 할 때만 메소드가 실행되기를 원합니다. 나는 또한 h : commandLink로 시도했지만 결과는 같습니다. 내가 무엇을 바꾸어야하는지, 또는 무엇이 잘못 되었습니까? @ManagedBean 클래스는 응용 프로그램 범위입니다.

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

복제본을 찾아야하지만, HTML을 렌더링하기 위해 페이지로드시 액션 메소드가 아닌 다른 것으로 EL을 포함 시키면됩니다. onclick은 jsf에서 액션 메소드가 아닙니다 (HTML 컨텍스트에 있음) – Kukeltje

+0

[JSF 페이지 onload가 버튼 클릭을 실행하는] 가능한 복제본] (http://stackoverflow.com/questions/25704443/jsf-page -onload-executed-button-click) – Kukeltje

+0

답장을 보내 주셔서 감사합니다. @Kukeltje, h : commandButton –

답변

-1

onClick는 웹 브라우저에서 자바 스크립트에 대한 핸들러입니다 : 내가 전화하는 방법은 다음과 같다! 호출하는 메소드는 Java이며 서버에서 실행됩니다!

웹 사이트가 웹 브라우저로 전송되기 전에 자바가 웹 사이트를 렌더링합니다.이 단계에서는 메소드가 호출됩니다. javascript가 실행될 수있는 웹 브라우저로 보낸 후, 이것은 두 번째 단계입니다. java 메소드를 실행하기 위해 서버에 새로운 요청 만하면됩니다. 나는 a4j:jsFunction을 선호한다.

+1

정확히 내가 언급 한 중복에 언급 된 내용입니까, 아니면 놓친 것입니까? 그리고 JSF 2에서는'h : link'가 도입되었으므로, f4 : ajax는 a4j 대신 사용할 수 있습니다. afaics에서는 아약스 호출을 사용할 필요가 없습니다. OP가 페이지 네비게이션을 원하기 때문에'commandLink'만으로도 충분합니다. – Kukeltje

+0

@Kukeltje 당신은 2 개의 가능한 복제물을 주석으로 남겨 둡니다. –

+0

@Kukeltje h : commandLink와 함께 작업하고 있는데, 페이지를 앞으로 만드는 방법을 바꾸어야했습니다. 이제 Java 클래스에서 앞으로 페이지를 수행하고 h : commandLink에서 action 속성을 사용하여 메소드를 호출합니다. 답변 해주셔서 감사합니다! –