Spring A 태그 - Spring A taegeu

<spring:message> 

이 태그는 ResourceBundleMessage에 저장된 properties 파일 데이터를 읽어온 key값으로 꺼낼 수 있습니다.

불편하게 직접 적는게 아니라 이러한 태그로 사용해서 돌아가는 이유는 

클라이언트의 locale에 맞춰서 그 언어에 맞는 프로퍼티스파일을 읽어들여 사용하게 되는것입니다.

ex)한국이라면 ko언어로 될것이고, 미국이라면 en언어로 사용될것입니다. 

물론 그에따른 properties파일은 각각 존재해야합니다.

이 예제같은경우는 validation_en / validation / label_en / label / .properties파일 4가지를 가지고있습니다.

1. {n} 형식을 이용해 변하는 부분을 명시할 수 있다.

태그내에 arguments ="${}","${}"

원하는 값을 순서대로 선언해주면 된다.

2. javascript에서도 사용가능

태그내에 javaScriptEscape ="true"로 선언.

3. EL로도 사용가능

mapping되어있는 코드의 value를 선언한 변수 var에 사용할 수 있다.

4. '<' 나 '&' 같은 html에서 사용될 수 있는 문자가 있을 경우

'&lt' '&amp'같이 자동으로 변경되어 출력된다

htmlEscape 속성 값을 지정하지 않으면, 

defalutHtmlEscape 컨텍스트 파라미터에서 지정한값을 사용한다

2. <form:form > 

이 태그는 Command라는 이름의 커맨드 객체를 가져오려고 하기때문에 

commandName 속성에 커맨드 객체의 이름을 명시해주어야 합니다

그렇기때문에 Controller 클래스에서 new Command 객체를 받아오는 'login'이라고 선언한 이름으로 

@ModelAttribute로 선언한 모델 데이터를 form에서 'login'이라는 이름으로 불러올 수 있게됩니다.

3. <form:input> 

이 태그는 등록되었던 글의 수정 폼이나 , 입력했다가 에러가나서 다시 그 페이지를 요청할때 

마지막까지 입력했던 데이터를 불러올때 편리하게 사용할 수 있도록 제공됩니다.

이 태그의 속성에는 path="" 라고 명시한 부분이 input태그가 생성되면서 순차대로 다 속성이 다 들어갑니다

- 예를 들어 path = "id" 라고 적혀 있는 위와같은 예제라면

1. type ="text"

2. id = "id"

3. name ="id" --> id와 name은 path에 입력된 값 그대로 둘다 들어갑니다

4. value = "${login.getId()}" 

value값은 처음 form에 등록되었던 command객체의 id와 path설정된 값이 자동으로 EL로 들어갑니다.

4. <form:select> 

이 태그는 select 태그하나로 옵션까지 같이 만들어줄 수 있습니다.

태그안의 속성으로 들어가는 path = "loginType" items = "${loginTypes}"

로 넣어준다면 위의 <input> path와 똑같이 Command객체의 id와 path 설정된 값이 자동으로 EL로 들어갑니다

또 하나 중요한건, 컬렉션객체인 list로 저장된 데이터를 받아와 하나씩 꺼내 <option> 태그로 만들어주었다는겁니다.

그것이 가능했던 이유는 Controller 클래스에서 @ModelAttribute("loginTypes")로 로직을 실행한 메서드에서 

list(컬렉션)으로 담은 데이터를 Model로 정보가 저장되어있기때문에 가능했다는걸 기억합니다.

단, 위와같이 select태그만 쓰면 컬렉션안에있는 내용만 option으로 만들 수 있기때문에 또다른 옵션을 추가하고싶다면

<option>태그까지 사용합니다. 그 방법은 아래와 같습니다

<form:select path = "loginType">

    <option value ="">---선택하세요---</option>

    <form:options items = "${loginTypes}"/>

</form:select>

cs

컬렉션을 옵션에서 따로 선언하면 내가 원하는 옵션태그를 따로 더 만들 수 있게 됩니다.

5. <form:options> 

또 하나, 예외가 있다면 컬렉션으로 받는 객체가 String이 아닐 수 있습니다.

String이 아닌 Code Class ---> DTO 객체가 저장된다고 생각하게될때

위와같은 예제에서 컬렉션 List와 들어가는 값이 String 이 아닌

public class Code{

    private String code;

    private String label;

....// getter & setter

}

cs

를 가진 클래스객체가 들어간다고 생각했을때

각각의 프로퍼티를 <option> 태그의 value속성과 화면에 비춰질 text로 사용하고싶은 경우일때에는

'itemValue'속성과 'itemLabel'속성을 사용해 컬렉션에 '저장된 객체' 에서 

<option>태그에 넣고싶은 속성에 DTO객체의 프로퍼티를 지정할 수 있습니다.

그 예제는 아래와 같습니다.

<form:select path="jobCode">

    <option value="">----선택하세요----</option>

    <form:options items="${jobCodes}" itemLabel="label" itemValues="code"/>

</form:select>

cs

select태그에 path로 저장된 부분은 id와 name이 "jobCode"라는 이름으로 들어갈거구요

<form:options> 태그에는 컬렉션을 저장해둔 items에서 하나씩 꺼내 DTO객체의 

1. label 변수에 담은 데이터는 itemLabel에

2. code 변수에 담은 데이터는 itemValues의 값으로 넣어서 화면에 나타나게 됩니다.

또한,

<form:select>, <form:options>, <form:option> 커스텀 태그의 장점은 

커맨드 객체의 프로퍼티 값과 일치하는 값을 갖는 <option>을 자동으로 선택해 준다는 점입니다.

예를 들어, 커맨드 객체의 loginType 프로퍼티의 값을 선택했을때 그 선택된값에 selected속성이 추가됩니다.

(클라이언트가 입력한 데이터를 다시 쏴줄때 편리해집니다.)

6. <form:checkbox> == <form:radiobox> 

이 태그는 한개 이상의 값을 커맨드 객체의 특정 변수에 저장하고 싶은 경우에 

배열이나 List같은 컬렉션 타입을 사용해 저장합니다. 

path부분과 value부분과 

value를 나눠서 넣고싶을때에 사용하는 itemLabel itemValues부분도 위와 같습니다.

차이점은

1. <span>태그로 감싸져서 checkbox가 만들어지는것과

2. 컬렉션에담아서 여러개의 check / radio로 쏠때에는

path로 지정한 이름은 name에만 다같이 같은 이름으로 박히고

id는 path로 지정한 데이터의 items에서 꺼낸 순서대로 뒤에 1,2,3.... 순으로 붙어서 id값으로 들어갑니다.

ex) 

<form:label path="favorites">선호 OS</form:label>

<form:checkboxes items="${favoritesOsNames}" path="favorites"/>

<form:errors path="favorites" />

path를 favorites로 지정했을때에

1. label은 for속성에 favorites

2. checkbox는 name속성에 favorites

3. checkbox의 id속성에는 favorites[i] 순으로 들어간다는 점입니다.

Toplist

최신 우편물

태그