2020. 9. 9. 22:49ㆍJava/Spring
커스텀Form 커스텀 태그에서 select, checkbox,radio 버튼은 기능이 더 다양하다.
동적으로 값과 이름을 설정 가능하다.
1. select
public class DataBean {
private String a1;
public String getA1() {
return a1;
}
public void setA1(String a1) {
this.a1 = a1;
}
}
@Controller
public class TestController {
@GetMapping("/test1")
public String test1(DataBean bean) {
bean.setA1("data2");
return "test1";
}
}
위와 같이 값을 넘겨주고 아래처럼 커스텀 태그를 사용한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix='form' uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form:form modelAttribute="dataBean" action='result'>
<form:select path="a1">
<form:option value="data1">항목1</form:option>
<form:option value="data2">항목2</form:option>
<form:option value="data3">항목3</form:option>
</form:select>
</form:form>
</body>
</html>
위 jsp 파일에서 form 커스텀 태그는 dataBean 객체에게 값을 받고, select는 path의 값 즉, a1에 저장된 data2 를 값으로 가진 항목이 자동으로 선택되어 화면에 나타난다.
기존 html로 표현되면 다음과 같다.
<form id="dataBean" action="result" method="post">
<select id="a1" name="a1">
<option value="data1">항목1</option>
<option value="data2" selected="selected">항목2</option>
<option value="data3">항목3</option>
</select>
</form>
만약 value와 항목의 값이 같을 때 options 를 통해서 한번에 설정 가능하다.
Controller 메소드에 다음과 같이 문자 배열을 만들어 Model을 통해 넘겨준다.
String [] data_list1 = {"data1","data2","data3"};
model.addAttribute("data_list1",data_list1);
jsp에서는 아래와 같이 options 의 items로 값을 받아온다.
<form:form modelAttribute="dataBean" action='result'>
<form:select path="a1">
<form:options items="${requestScope.data_list1}"/>
</form:select>
</form:form>
위와 같이 받아오면 자동으로 value와 보이는 값이 모두 넘겨 받은 배열의 길이와 해당 값 만큼 설정이 된다.
그리고 자동으로 path의 값과 동일한 값이 셀렉트 된다.
<form id="dataBean" action="result" method="post">
<select id="a1" name="a1">
<option value="data1">항목1</option>
<option value="data2" selected="selected">항목2</option>
<option value="data3">항목3</option>
</select>
<hr>
<select id="a1" name="a1">
<option value="data1">data1</option><option value="data2" selected="selected">data2</option><option value="data3">data3</option>
</select>
</form>
기존 html로 바꾼 코드
위 코드는 controller에서 ArrayList를 이용해서 넘겨줘도 같은 결과를 볼 수 있다.
ArrayList<String> data_list2 = new ArrayList<String>();
data_list2.add("data1");
data_list2.add("data2");
data_list2.add("data3");
model.addAttribute("data_list2",data_list2);
보이는 값과 value의 값을 다르게 설정하는 방법도 있다. 이 방법은 key,value를 사용해야 한다.
새로운 KeyValueBean 객체를 만든다.
public class KeyValueBean {
private String key;
private String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
controller 메서드에 다음 동작을 넣어준다.
KeyValueBean key_bean1 = new KeyValueBean();
KeyValueBean key_bean2 = new KeyValueBean();
KeyValueBean key_bean3 = new KeyValueBean();
key_bean1.setKey("항목1");
key_bean1.setValue("data1");
key_bean2.setKey("항목2");
key_bean2.setValue("data2");
key_bean3.setKey("항목3");
key_bean3.setValue("data3");
ArrayList<KeyValueBean> data_list3 = new ArrayList<KeyValueBean>();
data_list3.add(key_bean1);
data_list3.add(key_bean2);
data_list3.add(key_bean3);
model.addAttribute("data_list3",data_list3);
jsp에서 아래와 같이 받아준다.
<form:select path="a2">
<form:options items="${requestScope.data_list3}" itemLabel="key" itemValue="value"/>
</form:select>
위 코드에서 data_list3을 받으면서 해당 객체에 삽입된 key 값을 보여주는 값으로, value 값을 value 값으로 지정한다.
<select id="a2" name="a2">
<option value="data1">항목1</option><option value="data2">항목2</option><option value="data3" selected="selected">항목3</option>
</select>
html 코드로 바꾸면 value와 보여지는 값이 다르게 설정 되는 것을 알 수 있다.
1. checkbox
checkbox도 사용법이 비슷하다.
checkbox의 경우에는 다중 선택이 가능하므로 bean에서 배열 객체를 추가로 생성한다.
public class DataBean {
private String a1;
private String a2;
private String [] a3;
private String [] a4;
private String [] a5;
public String getA1() {
return a1;
}
public void setA1(String a1) {
this.a1 = a1;
}
public String getA2() {
return a2;
}
public void setA2(String a2) {
this.a2 = a2;
}
public String[] getA3() {
return a3;
}
public void setA3(String[] a3) {
this.a3 = a3;
}
public String[] getA4() {
return a4;
}
public void setA4(String[] a4) {
this.a4 = a4;
}
public String[] getA5() {
return a5;
}
public void setA5(String[] a5) {
this.a5 = a5;
}
}
컨트롤러 객체에 다음과 같이 배열을 만들고 그 값을 setter를 이용해 객체에 주입한다.
String [] check_list = {"data1", "data3"};
bean.setA3(check_list);
bean.setA4(check_list);
bean.setA5(check_list);
jsp에서 다음과 같이 설정하면 a5 배열의 값 data1,data3을 value의 값과 비교하여 일치하면 체크가 된다.
<form:checkbox path="a5" value="data1"/> 항목1
<form:checkbox path="a5" value="data2"/> 항목2
<form:checkbox path="a5" value="data3"/> 항목3
html 변경 코드
<input id="a51" name="a5" type="checkbox" value="data1" checked="checked"/><input type="hidden" name="_a5" value="on"/> 항목1
<input id="a52" name="a5" type="checkbox" value="data2"/><input type="hidden" name="_a5" value="on"/> 항목2
<input id="a53" name="a5" type="checkbox" value="data3" checked="checked"/><input type="hidden" name="_a5" value="on"/> 항목3
select와 마찬가지로 checkboxes 속성을 통해 보여지는 값과 value 값이 같은 요소들을 배열의 길이만큼 생성 가능하다.
<form:checkboxes items="${requestScope.data_list1}" path="a5"/>
위 코드는 data_list1의 data1,data2,data3 을 가지고 있는 checkbox를 만들고, a5의 요소와 같은 항목을 체크해서 보여준다.
아래의 html과 같다.
<span><input id="a54" name="a5" type="checkbox" value="data1" checked="checked"/>
<label for="a54">data1</label>
</span><span><input id="a55" name="a5" type="checkbox" value="data2"/>
<label for="a55">data2</label></span>
<span><input id="a56" name="a5" type="checkbox" value="data3" checked="checked"/>
<label for="a56">data3</label></span>
<input type="hidden" name="_a5" value="on"/>
key,value를 통해서 value와 보이는 값을 다르게 설정 가능하다.
<form:checkboxes items="${requestScope.data_list3}" path="a5" itemLabel="key" itemValue="value"/>
위 처럼 설정하면 보이는 값은 data_list3의 key, value 값은 data_list3의 value로 설정 된다.
html 변경 코드
<span><input id="a57" name="a5" type="checkbox" value="data1" checked="checked"/>
<label for="a57">항목1</label></span>
<span><input id="a58" name="a5" type="checkbox" value="data2"/>
<label for="a58">항목2</label></span>
<span><input id="a59" name="a5" type="checkbox" value="data3" checked="checked"/>
<label for="a59">항목3</label></span>
<input type="hidden" name="_a5" value="on"/>
3. Radio button
라디오 버튼은 1개만 선택이 가능하다. checkbox보다 select와 비슷하다.
<form:radiobutton path="a2" value="data1"/> 항목1
<form:radiobutton path="a2" value="data2"/> 항목2
<form:radiobutton path="a2" value="data3"/> 항목3
위 코드에서 a2와 value가 일치하는 항목이 선택된다.
html 변경 코드
<input id="a21" name="a2" type="radio" value="data1"/> 항목1
<input id="a22" name="a2" type="radio" value="data2"/> 항목2
<input id="a23" name="a2" type="radio" value="data3" checked="checked"/> 항목3
radiooptions를 통해 보이는 이름과 value가 같은 라디오버튼을 한번에 만들 수 있다.
<form:radiobuttons path="a2" items="${requestScope.data_list1}"/>
위 코드를 선언하면 data_list1에 있는 data1,data2,data3으로 보이는 이름과 value 값을 가진 라디오 버튼이 생성되고, a2와 값이 같은 항목이 체크된다.
다른 요소들과 마찬가지로 key,value를 통해서 보이는 이름과 value를 다르게 설정 가능하다.
<form:radiobuttons path="a2" items="${requestScope.data_list3}" itemLabel="key" itemValue="value"/>
<span><input id="a27" name="a2" type="radio" value="data1"/><label for="a27">항목1</label></span>
<span><input id="a28" name="a2" type="radio" value="data2"/><label for="a28">항목2</label></span>
<span><input id="a29" name="a2" type="radio" value="data3" checked="checked"/>
<label for="a29">항목3</label></span>
'Java > Spring' 카테고리의 다른 글
Spring MVC - RequestScope (0) | 2020.09.11 |
---|---|
Spring MVC - Redirect, Forward (0) | 2020.09.10 |
Spring MVC - Form 커스텀 태그 요소(1) (0) | 2020.09.09 |
Spring MVC - Form 커스텀 태그 (0) | 2020.09.09 |
Spring MVC - 커맨드 객체(Bean 객체를 통한 전달) (0) | 2020.09.08 |