액션 결과에 따라 a4j : commandButton을 조건부로 호출하는 방법
<a4j:commandButton action="#{myBean.doCalculation}"
oncomplete="redirectBrowser()" />
그러나 myBean.doCalculation()
에서 오류가 발생하면 oncomplete
특성이 항상 호출됩니다. 어떻게 행동 방법의 결과에 의존하게합니까?
액션 결과에 따라 a4j : commandButton을 조건부로 호출하는 방법
<a4j:commandButton action="#{myBean.doCalculation}"
oncomplete="redirectBrowser()" />
그러나 myBean.doCalculation()
에서 오류가 발생하면 oncomplete
특성이 항상 호출됩니다. 어떻게 행동 방법의 결과에 의존하게합니까?
완료되지 않은 이벤트에서 오류를 확인하고 오류가없는 경우 리디렉션 할 수 있습니다. 그것은 단지 facesContext.maximumSeverity을 찾고,이
oncomplete="#{facesContext.maximumSeverity == null ? 'redirectBrowser()' : 'doSomethingElse()'}"
음과 같이 수행 할 수 있습니다 == 널 (null)도 리디렉션해야 현재 최대 심각도와 같은 경고가있을 수 있습니다 충분하지 않습니다. 대신, 우선 순위 오류의 최대 심각도가있는 경우 보이는 방법 ... 당신은 JSF 2.0 경우
, 유효성 검사가 실패했거나하지 않은 경우 확인 FacesContext#isValidationFalied()
을 사용할 수 있습니다 쓰기 :
oncomplete="if (#{not facesContext.validationFailed}) redirectBrowser()"
그러나, 단지 액션 메소드에서 리디렉션을 수행하는 것은 더 깨끗한 :
public String doCalculation() {
// ...
if (success) {
return "nextPage.xhtml?faces-redirect=true";
} else {
return null;
}
}
그러나 더 깨끗한 Validator
에 의해 검증을 바로하는 것입니다. 이렇게하면 유효성 검사가 실패했을 때 조치 메소드가 호출되지 않습니다.
답변 해 주셔서 감사합니다! 그것은 매우 도움이되었습니다. 정중하게 한 지점에 동의하지 않으려면 작업 메서드에서 리디렉션을 수행하는 것이 덜 깨끗합니다. 문자열을 반환하여 리디렉션을 허용하는 IMHO는 Faces의 디자인 결함입니다. – wprl
이것은 설계상의 결함이 아닙니다. PRG는 가장 일반적으로 사용되는 웹 디자인 패턴 중 하나입니다. http://en.wikipedia.org/wiki/Post/Redirect/Get 그러나 X 페이지에서 Y 페이지로의 * 일반 바닐라 * 탐색을위한 POST 양식 사용은 절대적으로 디자인 결함 (JSF가 아닌 개발자). http://stackoverflow.com/questions/4317684/when-should-i-use-houtputlink-instead-of-hcommandlink – BalusC
죄송합니다. 게으른 말이 내가 찾고있는 단어가 아닙니다. PRG에 아무런 문제가 없습니다. 그것은 단지 clunky 문법입니다. 일부 리디렉션 메서드를 호출하는 대신 문자열을 반환하는 것이 이상하게 보입니다. – wprl
a4j : commandButton과 탐색에는 문제가 없습니다. 탐색에 사용하도록 설계되지 않았습니다. 하나의 옵션은 내비게이션에 을 사용하는 것입니다. –