1. 개요
이 시리즈 의 첫 번째 기사 에서 우리는 양식 태그 라이브러리의 사용과 데이터를 컨트롤러에 바인딩하는 방법을 소개했습니다.
이 기사에서는 Spring MVC가 양식을 만들고 유효성을 검사 하는 데 도움이되는 다양한 태그를 다룰 것 입니다.
2. 입력 태그
입력 태그 부터 시작하겠습니다 . 이 태그 는 기본적으로 바인딩 된 값과 type = 'text' 를 사용하여 HTML 입력 태그를 렌더링합니다 .
<form:input path="name" />
Spring 3.1부터는 이메일, 날짜 등과 같은 다른 HTML5 특정 유형을 사용할 수 있습니다. 예를 들어 , 우리가하기를 원한다면 이메일 작성 필드를 , 우리가 할 수있는 사용 유형 = '이메일'을 :
<form:input type="email" path="email" />
마찬가지로 , 생성 날짜 필드를, 우리가 사용할 수있는 유형 = '날짜' HTML5와 호환 많은 브라우저에서 날짜 선택을 렌더링 :
<form:input type="date" path="dateOfBirth" />
3. 비밀번호 태그
이 태그 는 바인딩 된 값을 사용하여 type = 'password' 인 HTML 입력 태그를 렌더링합니다 . 이 HTML 입력은 필드에 입력 된 값을 마스킹합니다.
<form:password path="password" />
4. 텍스트 영역 태그
이 태그는 HTML 텍스트 영역을 렌더링합니다 .
<form:textarea path="notes" rows="3" cols="20"/>
HTML 텍스트 영역 과 같은 방식으로 행 과 열의 수를 지정할 수 있습니다 .
5. 체크 박스 와 체크 박스 태그
체크 박스 태그는 HTML 렌더링 입력 과 태그 형 = '체크 박스를' . Spring MVC의 양식 태그 라이브러리는 모든 체크 박스 요구를 충족해야하는 체크 박스 태그에 대한 다양한 접근 방식을 제공 합니다.
<form:checkbox path="receiveNewsletter" />
위의 예 는 부울 값이 있는 고전적인 단일 확인란을 생성 합니다. 바운드 값을 true로 설정하면 이 확인란이 기본적으로 선택됩니다.
다음 예에서는 여러 확인란을 생성합니다 . 이 경우 체크 박스 값은 JSP 페이지 내에서 하드 코딩됩니다.
Bird watching: <form:checkbox path="hobbies" value="Bird watching"/>
Astronomy: <form:checkbox path="hobbies" value="Astronomy"/>
Snowboarding: <form:checkbox path="hobbies" value="Snowboarding"/>
여기서 바인딩 된 값은 array 또는 java.util.Collection 유형입니다 .
String[] hobbies;
체크 박스 태그 의 목적은 런타임에 체크 박스 값이 생성되는 여러 체크 박스를 렌더링하는 데 사용됩니다.
<form:checkboxes items="${favouriteLanguageItem}" path="favouriteLanguage" />
값을 생성하기 위해 항목 속성 에서 사용 가능한 옵션을 포함 하는 Array , List 또는 Map 을 전달합니다 . 컨트롤러 내에서 값을 초기화 할 수 있습니다.
List<String> favouriteLanguageItem = new ArrayList<String>();
favouriteLanguageItem.add("Java");
favouriteLanguageItem.add("C++");
favouriteLanguageItem.add("Perl");
일반적으로 바인딩 된 속성은 컬렉션이므로 사용자가 선택한 여러 값을 보유 할 수 있습니다.
List<String> favouriteLanguage;
6. 라디오 버튼 과 라디오 버튼 태그
이 태그 는 type = 'radio' 로 HTML 입력 태그를 렌더링합니다 .
Male: <form:radiobutton path="sex" value="M"/>
Female: <form:radiobutton path="sex" value="F"/>
일반적인 사용 패턴에는 동일한 속성에 다른 값이 바인딩 된 여러 태그 인스턴스가 포함됩니다.
private String sex;
그냥 같이 체크 박스의 태그는 라디오 버튼의 태그는 여러 HTML의 렌더링 입력 과 태그 형 = '라디오' :
<form:radiobuttons items="${jobItem}" path="job" />
이 경우 사용 가능한 옵션을 항목 속성 에서 사용 가능한 옵션을 포함 하는 Array , List 또는 Map 으로 전달할 수 있습니다 .
List<String> jobItem = new ArrayList<String>();
jobItem.add("Full time");
jobItem.add("Part time");
7. 선택 태그
이 태그는 HTML 선택 요소를 렌더링합니다 .
<form:select path="country" items="${countryItems}" />
값을 생성하기 위해 항목 속성 에서 사용 가능한 옵션을 포함 하는 Array , List 또는 Map 을 전달합니다 . 다시 한 번 컨트롤러 내에서 값을 초기화 할 수 있습니다.
Map<String, String> countryItems = new LinkedHashMap<String, String>();
countryItems.put("US", "United States");
countryItems.put("IT", "Italy");
countryItems.put("UK", "United Kingdom");
countryItems.put("FR", "France");
선택 태그는 중첩 된 옵션 및 옵션 태그 의 사용도 지원합니다 .
그동안 옵션 태그는 하나의 HTML 렌더링 옵션 의 옵션 태그는 HTML의 List을 렌더링 옵션 태그.
옵션 태그는 소요 배열 하는 List 이나 Map 에서 사용할 수있는 옵션이 포함 된 항목 만 등의 특성, 선택 태그 :
<form:select path="book">
<form:option value="-" label="--Please Select--"/>
<form:options items="${books}" />
</form:select>
때 우리가 가질 필요가 선택 한 번에 여러 항목을 , 우리는 할 수 만드는 여러 List 상자를. 이러한 유형의 List을 렌더링하려면 select 태그에 multiple =”true” 속성을추가하기 만하면됩니다.
<form:select path="fruit" items="${fruit}" multiple="true"/>
여기서 바인딩 된 속성은 배열 또는 java.util.Collection입니다 .
List<String> fruit;
8. 숨겨진 태그
이 태그 는 바인딩 된 값을 사용하여 type = 'hidden' 인 HTML 입력 태그를 렌더링합니다 .
<form:hidden path="id" value="12345" />
9. 오류 태그
필드 오류 메시지는 컨트롤러와 관련된 유효성 검사기에 의해 생성됩니다. The Errors Tag를 사용하여 이러한 필드 오류 메시지를 렌더링 할 수 있습니다.
<form:errors path="name" cssClass="error" />
그러면 경로 속성에 지정된 필드에 대한 오류가 표시 됩니다. 오류 메시지는 기본적으로 span 태그 내에서 렌더링 되며 .errors 는 경로 값에 id 로 추가되고 선택적으로 cssClass 속성 의 CSS 클래스 는 출력 스타일을 지정하는 데 사용할 수 있습니다.
<span id="name.errors" class="error">Name is required!</span>
기본 스팬 태그 대신 다른 요소로 오류 메시지를 묶기 위해 요소 속성 내에 선호 요소를 지정할 수 있습니다 .
<form:errors path="name" cssClass="error" element="div" />
이렇게하면 div 요소 내에서 오류 메시지가 렌더링됩니다 .
<div id="name.errors" class="error">Name is required!</div>
I N 갖는 외에 표시하는 기능 에 대한 오류 특정 입력 요소는 우리가 특정 페이지에 대한 에러 List 전체 (관계없이 필드)를 표시 할 수있다. 이것은 와일드 카드 *를 사용하여 이루어집니다 .
<form:errors path="*" />
9.1. 유효성 검사기
주어진 필드에 대한 오류를 표시하려면 유효성 검사기를 정의해야합니다.
public class PersonValidator implements Validator {
@Override
public boolean supports(Class clazz) {
return Person.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object obj, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required.name");
}
}
이 경우 필드 이름 이 비어 있으면 유효성 검사기가 리소스 번들에서 required.name 으로 식별 된 오류 메시지를 반환합니다 .
리소스 번들은 다음과 같이 Spring XML 구성 파일에 정의 됩니다.
<bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource">
<property name="basename" value="messages" />
</bean>
또는 순수한 Java 구성 스타일 :
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages");
return messageSource;
}
오류 메시지는 messages.properties 파일에 정의되어 있습니다.
required.name = Name is required!
이 유효성 검사를 적용하려면 컨트롤러에 유효성 검사기에 대한 참조를 포함하고 사용자가 양식을 제출할 때 호출되는 컨트롤러 메서드에서 validate 메서드를 호출해야합니다.
@RequestMapping(value = "/addPerson", method = RequestMethod.POST)
public String submit(
@ModelAttribute("person") Person person,
BindingResult result,
ModelMap modelMap) {
validator.validate(person, result);
if (result.hasErrors()) {
return "personForm";
}
modelMap.addAttribute("person", person);
return "personView";
}
9.2. JSR 303 빈 유효성 검사
Spring 3부터 빈 유효성 검사 를 위해 JSR 303 ( @Valid 어노테이션을 통해 )을 사용할 수 있습니다 . 이렇게하려면 클래스 경로에 JSR303 유효성 검사기 프레임 워크 가 필요합니다 . 우리는 사용 최대 절전 모드 검사기 (참조 구현). 다음은 POM에 포함해야하는 의존성입니다.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.1.Final</version>
</dependency>
@Valid 어노테이션을 통해 Spring MVC가 JSR 303 유효성 검사를 지원하도록하려면 Spring 구성 파일에서 다음을 활성화해야합니다.
<mvc:annotation-driven/>
또는 Java 구성에서 해당 어노테이션 @EnableWebMvc 를 사용하십시오 .
@EnableWebMvc
@Configuration
public class ClientWebConfigJava implements WebMvcConfigurer {
// All web configuration will go here
}
다음으로, 우리는 컨트롤러 메소드에 어노테이션을 할 필요가 있음을 우리가 원하는 유효성을 와 @Valid 어노테이션 :
@RequestMapping(value = "/addPerson", method = RequestMethod.POST)
public String submit(
@Valid @ModelAttribute("person") Person person,
BindingResult result,
ModelMap modelMap) {
if(result.hasErrors()) {
return "personForm";
}
modelMap.addAttribute("person", person);
return "personView";
}
이제 우리는 Hibernate 유효성 검사기 어노테이션으로 유효성을 검사하기 위해 엔티티의 속성에 어노테이션을 달 수 있습니다.
@NotEmpty
private String password;
기본적으로이 어노테이션은 비밀번호 입력 필드를 비워두면 "비어있을 수 없음"으로 표시됩니다 .
유효성 검사기 예제에 정의 된 리소스 번들에 속성을 만들어 기본 오류 메시지를 재정의 할 수 있습니다. 메시지의 키는 AnnotationName.entity.fieldname 규칙을 따릅니다 .
NotEmpty.person.password = Password is required!
10. 결론
이 예제에서 우리는 Spring이 폼 작업을 위해 제공하는 다양한 태그를 탐색했습니다.
또한 유효성 검사 오류 표시를위한 태그와 사용자 지정 오류 메시지를 표시하는 데 필요한 구성을 살펴 보았습니다.
위의 모든 예제는 GitHub 프로젝트 에서 찾을 수 있습니다 . 이것은 Eclipse 기반 프로젝트이므로 그대로 가져 와서 실행하기 쉽습니다.
프로젝트가 로컬에서 실행되면 다음 위치에서 양식 예제에 액세스 할 수 있습니다.
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/spring-mvc-form-tags
'Java' 카테고리의 다른 글
Java 세션 시간 초과 (0) | 2021.03.29 |
---|---|
Java에서 IP 별 위치 정보 (0) | 2021.03.29 |
자바 스크립트에서 Spring MVC 모델 객체에 접근하기 (0) | 2021.03.29 |
Spring MVC의 캐시 헤더 (0) | 2021.03.29 |
Spring MultipartFile을 파일로 변환 (0) | 2021.03.28 |