2010-03-11 4 views
1

사용자가 버튼을 클릭하면 다른 페이지로 리디렉션되는 양식이 있지만 자바 스크립트로 클릭을 시뮬레이션 할 때 리디렉션 실패합니다. 타 아약스 호출은 javax.faces.ViewState를 제외하고 (정확히 동일하지만 서로 다른 결과를javascript click()과 JSF를 사용하는 버튼을 클릭하는 사용자 간의 차이점

양식이 같은 같습니다.

<h:form id="form" onkeypress="trapEnter(event);"> 
    <h:outputText value="Number" /> 
    <h:inputText value="#{form.number}" /> 

    <a4j:commandButton id="act" value="Go" action="#{form.go}" /> 
</h:form> 

자바 스크립트 함수 :

function trapEnter(evt) { 
    // cut out to save space 

    if (keycode == 13) { 
    document.getElementById('form:act').click() 
    return false; 
    } else { 
    return true; 
    } 
} 

을 텍스트 입력란에 3을 입력하고 이동을 클릭하면 # {form.go}이 (가) 반환 한 대상에 페이지가 예상대로 리디렉션됩니다.

텍스트 입력 상자에 3을 입력하고를 누릅니다. # {form.go}이 (가) 올바르게 호출되었지만 페이지가 리디렉션되지 않습니다.

두 경우 모두 form.go가 올바르게 호출되고 리디렉션에 올바른 값을 반환합니다. 누구든지 자바 스크립트 클릭() 작동하지 않는 이유를 말할 수 있었고, 내가 완전히 잘못한 일을하는 경우, 올바르게 수행하는 방법을 알려주십시오.

차이점이 있다면 Firefox 3.5를 사용하고 있습니다.

감사합니다.

+2

form.submit()을 호출 할 수 없습니까? – Robusto

+0

+1 - @Robusto이 예제에서는 true이지만, 필요한 시나리오가 다를 수 있습니다. – RubyDubee

+0

@Robusto :이 특별한 경우에는 불가능합니다. – BalusC

답변

0

왜 이것이 작동하지 않는지 알지 못했습니다. 내가 아는 한, 여전히 효과가 없습니다.

<rich:hotKey selector="#form" key="return" handler="document.getElementById('form:act').click();"/> 

이것은이 적용되는 페이지에 포함되어

그러나, JBoss community forum에 같은 질문을 한 후, richfaces이를 달성하기 위해 다른 방법이있다. 이 작동합니다.

0

false를 반환합니다. 리디렉션을 방지합니다.

+0

사실을 반환하더라도 작동하지 않습니다. 사실 –

2

a4j:commandButtonajaxical 요청을 발생시키는 자바 스크립트가 포함 된 버튼 요소를 생성합니다. 그러나 귀하의 기능 요구 사항 ("리디렉션 페이지")은 "일반 바닐라"h:commandButton으로 잘 수행 될 수 있습니다. 그래서 나는 그것을 대신 사용할 것입니다.

그러나 키 누르기에서 true 또는 false를 반환 할 필요는 없습니다. 다음과 같이 함수를 다시 작성하십시오.

function trapEnter(event) { 
    if (event.keyCode == 13) document.getElementById('form:act').click(); 
} 

그렇습니다 (예 : Enter 키가 브라우저 독립적 임).

+0

나는 A4J를 사용하십시오있는 명령을 나는 A4J을 활용하기를 원하기 때문에 : 지원은 '제발 환자의 인디케이터 (indicator)를 표시할지, \t \t \t \t \t \t \t \t 이것은 h : commandButton과 작동하지 않습니다. –

+0

그럼 'a4j : commandButton'을 고수하고 앞에서 설명한 기능을 사용하십시오. 그게 도움이되지 않는다면 나는 더 이상 모른다. 어쩌면 JSF 코드의 결함/버그 일 수 있습니다. 디버거가 더 알려줄 것입니다. – BalusC

관련 문제