2012-10-31 4 views
1

완전히 편집 됨 : 아마도 나는 문제를 혼합하고 오해했습니다. 내 코드를 간소화 한 후에 질문이 단순화됩니다. <p:commandButton>이 페이지 새로 고침 (예 : 브라우저 창에서 F5를 누를 때)과 같은 동작 방법을 실행하지 못하게하려면 어떻게해야합니까?Primefaces commandButton은 페이지 새로 고침시 동작 메서드를 호출합니다.

JSF 코드 :

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:body> 
     <h:form> 
      <h:outputText value="#{bugBean.number}" /> 
      <h:outputText value="#{bugBean.isComplete()}" /> 
      <p:commandButton id="entryCommand" value="add" 
       action="#{bugBean.increase()}" update="@form" oncomplete="#{bugBean.complete()}"/> 
     </h:form> 
    </h:body> 
    </html> 

백업 빈 코드 :

package huhu.main.managebean; 
import java.io.Serializable; 
import javax.enterprise.context.SessionScoped; 
import javax.inject.Named; 

@Named 
@SessionScoped 
public class BugBean implements Serializable { 

    private static final long serialVersionUID = 1L; 
    private int number; 
    private boolean isComplete = false; 

    public void increase(){ 
     number++; 
    } 

    public void complete(){ 
     isComplete = true; 
    } 

    public int getNumber() { 
     return number; 
    } 

    public void setNumber(int number) { 
     this.number = number; 
    } 

    public boolean isComplete() { 
     return isComplete; 
    } 

    public void setComplete(boolean isComplete) { 
     this.isComplete = isComplete; 
    } 
} 

업데이트 : 나는이 같은 oncomplete 물건을 제거한다하더라도 한 번만 <p:commandButton>을 클릭 카운터는 상승 모든 페이지를 새로 고침 할 때마다

<h:form> 
     <h:outputText value="#{bugBean.number}" /> 
     <p:commandButton id="entryCommand" value="add" 
      action="#{bugBean.increase()}" update="@form"/> 
    </h:form> 
+0

"페이지 새로 고침"을 사용하면 웹 브라우저에서 F5/Ctrl + R을 누르는 것과 같은 의미입니까? – BalusC

+0

@BalusC 그래, 그게 내 뜻이야! – Lester

+0

여기에 페이지의 나머지 부분을 게시하여 컨텍스트를 제공하십시오. – kolossus

답변

5

구조가 Ajax 지원을하지 못하는 이유는 머리 정의가 누락되어 있기 때문입니다. 이 경우에는 <h:body> 태그 바로 위에 <h:head/>을 추가하고 모든 것이 올바르게 작동합니다.

모든 참여자 여러분 께 감사드립니다.

0

나는 액션 메소드 increase() 각 페이지 새로 고침 호출이 아니라고 생각하지만, 대신 complete() 방법이라고, 이것은 아마 당신이 액션 메소드가 호출 된 것을 생각하고 있습니다.

p:commandButton 내부 oncomplete 특성은 클라이언트 측 동작을 나타내고, 그래서 JS 방법, 그리고 서버 동작 : 각 페이지 새로 고침을 파싱 할 때 EL이 #{bugBean.complete()}를 행한다.

+0

버튼을 클릭했는지 여부와 관계없이 모든 페이지를 새로 고칠 때마다 oncomplete 메소드가 실행됩니까? 'action' 메소드는 어떻습니까? oncomplete를 제거하더라도 버튼을 클릭하지 않아도 페이지 새로 고침시 action 메서드가 실행됩니다. – Lester

+0

예, 귀하의 경우에는 버튼이 클릭되었는지 여부에 상관없이 EL 식이므로 완료되지 않은 메서드가 실행됩니다. 아니요, 각 페이지를 새로 고칠 때 액션 메서드가 실행되지 않습니다. 다시 확인하십시오. – perissf

+0

내 질문을 편집/업데이트했습니다. – Lester

관련 문제