웹사이트 검색

JSF 유효성 검사 예제 자습서 - 유효성 검사기 태그, 사용자 지정 유효성 검사기


JSF 유효성 검사 모델은 UI 구성 요소의 유효성을 검사하기 위한 표준 클래스 집합을 정의합니다. JSF 라이브러리는 javax.faces.validator.Validator 구현에 해당하는 핵심 태그 그룹을 정의합니다. 표준 오류 메시지 유효성 검사 모델 외에도 사용자 지정 유효성 검사를 정의할 수 있습니다. JSF의 유효성 검사는 명령형과 선언형으로 분류할 수 있습니다.

JSF 유효성 검사 - 선언적 유효성 검사기

JSF 표준 유효성 검사기 또는 Bean 유효성 검사기를 사용하여 실행되는 유효성 검사는 선언적 유형에 속합니다. JSF 표준 유효성 검사기의 예는 길이 유효성 검사기, 필수 유효성 검사기 등입니다. 표준 유효성 검사기의 예를 고려하십시오. mobile.xhtml을 mobile.xhtml로 생성

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml"
	xmlns:h="https://java.sun.com/jsf/html">
<h:head>
</h:head>
<h:body>
	<h3>Add Mobile Details</h3>
	<h:form>
		<h:panelGrid columns="3">
			<h:outputLabel for="mname">Mobile Name:</h:outputLabel>
			<h:inputText id="mname" required="true"
				requiredMessage="Mobile Name is mandatory"></h:inputText>
			<br>
			<br>

			<h:outputLabel for="color">Color:</h:outputLabel>
			<h:inputText id="color" required="true"></h:inputText>
			<br>
			<br>

			<h:outputLabel for="model">Model Number:</h:outputLabel>
			<h:inputText id="model"></h:inputText>
			<br>
			<br>

			<h:commandButton value="Submit"></h:commandButton>
		</h:panelGrid>
	</h:form>
</h:body>
</html>

JSF 필수 검증

표준 유효성 검사 메시지는 모든 경우에 충분하지 않으며 때로는 복잡한 유효성 검사가 필요할 수 있습니다. 명령형 유효성 검사를 통해 사용자는 다음을 수행할 수 있습니다.

  1. Bean 메서드에서 유효성 검사 실행
  2. 런타임 동안 클래스에서 주석 @FacesValidator 사용

Bean 메서드에서 유효성 검사 실행 이 유형의 유효성 검사에서는 UIComponents의 유효성을 검사하고 inputText 태그의 유효성 검사기 속성을 통해 jsf 페이지에서 이 메서드를 호출하기 위해 빈에 메서드를 작성합니다. 이제 Bean에서 유효성 검사를 실행하는 예를 살펴보겠습니다. mob.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml"
	xmlns:h="https://java.sun.com/jsf/html">
<h:head>
</h:head>
<h:body>
	<h3>Add Mobile Details</h3>
	<h:form>
		<h:outputLabel for="mno">Model Number:</h:outputLabel>
		<h:inputText id="mno" value="#{mobile.mno}" required="true" size="4"
			disabled="#{mobile.mno}" validator="#{mobile.validateModelNo}">
		</h:inputText>
		<h:commandButton value="Submit"></h:commandButton>
	</h:form>
</h:body>
</html>

이 페이지에서는 유효성 검사기 태그 속성에서 Java Bean의 validateModelno 메소드를 호출합니다. Mobile.java를 다음과 같이 생성합니다.

package com.journaldev.jsf.bean;

import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;

@ManagedBean
@SessionScoped
public class Mobile implements Serializable {

	private static final long serialVersionUID = -7250065889869767422L;

	// @NotNull(message="Please enter the model number")
	private String mno;

	public String getMno() {
		return mno;
	}

	public void setMno(String mno) {
		this.mno = mno;
	}

	public void validateModelNo(FacesContext context, UIComponent comp,
			Object value) {

		System.out.println("inside validate method");

		String mno = (String) value;

		if (mno.length() < 4) {
			((UIInput) comp).setValid(false);

			FacesMessage message = new FacesMessage(
					"Minimum length of model number is 4");
			context.addMessage(comp.getClientId(context), message);

		}

	}

}

Bean에서 @FacesValidator 사용 - 사용자 정의 JSF 유효성 검사기

이 방법에서는 @FacesValidator 주석을 사용하고 유효성 검사기의 이름을 지정하고 유효성 검사 메서드를 재정의하여 유효성 검사기를 구현합니다. mobvalidator.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml"
	xmlns:h="https://xmlns.jcp.org/jsf/html"
	xmlns:f="https://java.sun.com/jsf/core">
<h:head>
</h:head>
<h:body>
	<h:form>
		<h3>Validation using Faces validator</h3>
		<h:outputLabel for="mno" value="Model Number: " />
		<h:inputText id="mno" value="#{mobileValidator.mno}">
		<f:validator validatorId="mobileValidator" />
		</h:inputText>
		<h:message for="mno" style="color:blue" />
		<p></p>
		<h:commandButton value="Submit"></h:commandButton>
	</h:form>
</h:body>
</html>

여기에서 우리는 태그의 validatorId 속성에서 "mobileValidator\라는 사용자 지정 유효성 검사기를 호출합니다. 다음과 같이 MobileValidator.java를 만듭니다.

package com.journaldev.jsf.bean;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@ManagedBean
@SessionScoped
@FacesValidator("mobileValidator")
public class MobileValidator implements Validator {

	private String mno;

	public String getMno() {
		return mno;
	}

	public void setMno(String mno) {
		this.mno = mno;
	}

	int maximumlength = 6;

	public MobileValidator() {
	}

	@Override
	public void validate(FacesContext fc, UIComponent uic, Object obj)
			throws ValidatorException {

		String model = (String) obj;

		if (model.length() > 6) {
			FacesMessage msg = new FacesMessage(
					" Maximum Length of 6 is exceeded.Please enter values within range");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);

			throw new ValidatorException(msg);
		}

	}

}

JSF 검증 예제 프로젝트 다운로드