ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링4.0 - 뷰 규현 : 커스텀태그 정리
    웹프로그래밍/spring 2018. 7. 21. 16:32


    • 메시지 출력


    기본 설정법

    먼저 messageSource를 빈으로 등록한다.

    message 패키지의 위치한 error, label.properties 파일

    <bean id="messageSource"

    class="org.springframework.context.support.ResourceBundleMessageSource">

    <property name="basenames">

    <list>

    <value>message.error</value>

    <value>message.label</value>

    </list>

    </property>

    <property name="defaultEncoding" value="UTF-8" />

    </bean>


    • 메시지 출력 커스텀 태그

    <spring:message> 사용예시


    -label.properties

    email=이메일

    password=암호


    login.form.title=로그인 폼

    login.form.login=로그인

    login.form.help=이메일/암호로 yuna@yuna.com/yuna 입력 테스트

    login.form.type=로그인 유형


    greeting={0} 회원님, {1}         //{숫자}로 변하는 부분을 명시


    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>



    <input type="submit" value="<spring:message code="login.form.login" />">

    </form:form>


    <ul>

    <li><spring:message code="login.form.help" /></li>

    </ul>


    @RequestMapping("/hello")

    public String hello(Model model, @RequestParam(value = "name", required = false) String name) {

    model.addAttribute("me", name);

    model.addAttribute("greeting", "안녕하세요");

    return "hello";

    }


    <spring:message code="greeting" arguments="${me}, ${greeting}" />



    • 코드에 해당하는 메시지가 없을 경우 익셉션 발생 

    text속성으로 기본 메시지를 입력한다.


    <spring:message code="no_code" text="코드가 없습니다."/>



    • Escape 속성 값 지정

    -HTML에서 특수문자가 포함될 경우 -> 

    htmlEscape="false"


    -자바 스크립트에서 <spring:message> 태그가 생성한 문자열을 변수 값으로 사용할때 ->

    <spring:message code="login.form.help" javaScriptEscape="true"/>


    • 메시지를 출력하지 않고 request나 session 같은 객체에 저장

    var 속성은 <spring:message>가 생성한 메시지를 저장할 변수 이름을 지정한다.

    scope 속성은 메시지를 저장할 범위로 page, request, session, application 등이 있고 기본 값은 page이다.

    <spring:message code="login.form.help" var="label" scope="request"/>

    ${label}:<input type=.../>






    • 폼 관련 커스텀 태그

    설정

    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>


    태그 종류

    <form:form> - 폼 생성시 사용

    <form:form commandName="커맨드 객체 이름"> - 기본 값은 "command", action, enctype, method

    <form:input> - text 타입

    <form:password> - password 타입

    <form:hidden>


    <form:select>

    <form:options>

    <form:option>


    @ModelAttribute("loginTypes")

    protected List<String> referenceData() {

    List<String> loginTypes = new ArrayList<String>();

    loginTypes.add("일반회원");

    loginTypes.add("기업회원");

    loginTypes.add("헤드헌터회원");

    return loginTypes;

    }


      <label for="loginType"><spring:message code="login.form.type" /></label>

        <form:select path="loginType" items="${loginTypes}" />


    <form:select path="loginType">

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

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

    </form:select>




    public class Code {


    private String code;

    private String label;


    public Code(String code, String name) {

    this.code = code;

    this.label = name;

    }


    public String getCode() {

    return code;

    }


    public void setCode(String code) {

    this.code = code;

    }


    public String getLabel() {

    return label;

    }


     @ModelAttribute("jobCodes")

    public List<Code> jobCodes() {

    return Arrays.asList(

    new Code("1", "운동선수"),

    new Code("2", "프로그래머"),

    new Code("3", "예술가"),

    new Code("4", "작가")

    );

    }


    <label for="jobCode">직업</label>:

    <form:select path="jobCode" >

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

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

    </form:select>



    <form:checkboxes>

    @ModelAttribute("favoriteOsNames")

    public List<String> favoriteOs() {

    return Arrays.asList("윈도우XP", "윈도우7", "윈도우8", "맥OS", "우분투");

    }



    public class MemberRegistRequest {

    private String[] favoriteOs;


    public String[] getFavoriteOs() {

    return favoriteOs;

    }


    public void setFavoriteOs(String[] favoriteOs) {

    this.favoriteOs = favoriteOs;

    }

    }


    <form:checkboxes> 태그는 favoriteOsNames 리스트 객체 안에 값을 출력한다.

    웹 브라우저에서 체크한 속성 값만 폼 태그로 전달된다.

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

    <form:checkboxes items="${favoriteOsNames}" path="favoriteOs"/>

    <form:errors path="favoriteOs" />


    <form:checkbox>

    웹 브라우저에서 체크하면(checked) -> true

    체크 안하면(unchecked) - > false 

    를 allowNoti 속성 값으로 전달

    public class MemberRegistRequest {


    private boolean allowNoti;


    public boolean isAllowNoti() {

    return allowNoti;

    }


    public void setAllowNoti(boolean allowNoti) {

    this.allowNoti = allowNoti;

    }

    }


    <form:checkbox path="allowNoti" label="이메일을 수신합니다."/>


    <form:radiobuttons>

    @ModelAttribute("tools")

    public List<String> tools() {

    return Arrays.asList("이클립스", "인텔리J", "넷빈즈", "Vim");

    }


    <form:label path="tool">주로 사용하는 개발툴</form:label>

    <form:radiobuttons items="${tools}" path="tool" />


    <form:radiobutton>

    <form:radiobutton path="tool" value="da" label="da"/>


    <form:textarea>

    <form:label path="etc">기타</form:label>

    <form:textarea path="etc" cols="20" rows="3"/>


    <form:errors>

    2018/07/17 - [웹프로그래밍/스프링 4.0] - 스프링4.0 - Validator / Errors / BindingResult로 객체 검증 : 에러 메시지


    <spring:htmlEscape>

    defaultHtmlescape 컨텍스트 파라미터를 사용하여 웹 어플리케이션 전반에 걸쳐서 HTML의 특수 문자를 엔티티 레퍼런스로 치환할지 여부를 결정한다.

    만약 각 JSP별로 특수 문자 치환 여부를 설정하려면 아래 코드를 JSP페이지에 입력한다.


    <spring:htmlEscape defaultHtmlEscape="true"/>