특정 inputText에 대한 유효성 검사 오류가있을 때 JSF의 inputText 필드에 포커스를 설정하려고합니다. 어떻게 구현할 수 있습니까?유효성 검사 오류시 inputText에 포커스 설정
inputText의 validatorMessage를 사용하면이 작업을 수행 할 수 있다고 생각했지만 그렇지 않습니다.
특정 inputText에 대한 유효성 검사 오류가있을 때 JSF의 inputText 필드에 포커스를 설정하려고합니다. 어떻게 구현할 수 있습니까?유효성 검사 오류시 inputText에 포커스 설정
inputText의 validatorMessage를 사용하면이 작업을 수행 할 수 있다고 생각했지만 그렇지 않습니다.
이러한 기본 동작은 없습니다. 작업을 직접 구현하거나 타사 라이브러리를 사용해야합니다. 기본적으로 렌더링 응답 중에 모든 UIInput
구성 요소에 대해 제출 된 양식을 검토하고 isValid()
이 false
을 반환하는 첫 번째 구성 요소를 찾은 다음 클라이언트 ID를 요청 맵에 저장하여 JS 변수로 인쇄 할 수 있도록해야합니다.
form.visitTree(VisitContext.createVisitContext(), new VisitCallback() {
@Override
public VisitResult visit(VisitContext context, UIComponent component) {
if (component instanceof UIInput && !((UIInput) component).isValid()) {
context.getFacesContext().getExternalContext().getRequestMap()
.put("focus", component.getClientId(context.getFacesContext()));
return VisitResult.COMPLETE;
}
return VisitResult.ACCEPT;
}
});
는 그런 다음 포커스를 설정하려면 다음 스크립트를 사용할 수
는
<h:outputScript target="body">
var focus = '#{focus}';
if (focus) {
document.getElementById(focus).focus();
}
</h:outputScript>
는 JSF 유틸리티 라이브러리 OmniFaces이를위한 재사용 가능한 구성 요소가의 <o:highlight>
(소스 코드 here 및 쇼케이스 데모 here을). 또한 CSS에 의해 다른 배경색을 지정할 수 있도록 무효화 된 입력에 styleclass를 설정합니다.
솔루션 BalusC에 감사드립니다. 위에서 설명한 내용을 구현하려고 시도했지만 불행히도 requiredMessage/validatorMessage는 렌더링 응답에있는 코드에 도달하기 전에 던져진 것처럼 보입니다. 이 문제를 해결하는 방법에 대한 아이디어가 있으십니까? 도움이 당신의 도움을 주셔서 감사합니다 – damien535
내 대답에 말했듯이, 당신은 렌더링 응답 단계 중에 작업을 수행 할 필요가 일부 명령 단추 동작 방법 호출 동작 단계 중에. OmniFaces와 같은 맞춤 구성 요소 또는 'PhaseListener'를 사용할 수 있습니다. – BalusC
PhaseListener를 만들고 afterPhase 메서드와 beforePhase 메서드에서 유사한 코드를 배치하려고 시도했지만 getPhaseId 메서드도 RENDER_RESPONSE를 반환하도록 설정되었습니다. 불행히도 페이지가로드 될 때만 코드가 적용되고 내 코드는 다시 히트하지 않습니다. 제출 버튼을 클릭합니다. 내가 어디에서 잘못 읽었을 지 아십니까? 시간 내 줘서 고마워. – damien535