본문 바로가기
Web Development/JSTL

[JSTL / JSP] jstl/functions 의 split(fn:split) 공백 처리 주의점

by 감자맹고우 2022. 1. 11.
728x90
반응형

 

[ fn:split 에 대한 간략한 설명 ]

 

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

 

JSP에서 EL태그로 컨트롤러에서 넘어온 값을 처리하다보면, jstl functions를 이용해야 되는 경우가 있다.

주로 위와 같이 prefix로 fn을 설정하고 쓰게 되는데, 흔하게 쓰는 fn:length나 fn:split 등 편리한 기능을 제공한다.

 

그 중에서 이번엔 fn:split에 대한 내용을 공유하고자 한다.

 

fn:split은 Java나 Javascript의 split과 유사한 기능을 제공한다.

split은 문자열을 구분자(Delimiter)를 기준으로 나누어진 배열을 반환한다.

 

아래는 예제와 예제 코드이다.

- 문자열 : "피자,햄버거,치킨,콜라"
- 구분자 : ","
- 반환되는 배열 : ["피자","햄버거","치킨","콜라"]

 

 

<!-- Controller -->
String food = "피자,햄버거,치킨,콜라";
model.addAttribute("food", food);

<!-- JSP -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<input type="text" value="${fn:split(food, ',')[0]}" />

 

위와 같이 코드를 입력하면 <input type="text" value="피자" /> 형태로 출력이 된다.

 

반응형

 

[ 주의점 ]

 

fn:split은 이렇게 편리한 기능을 제공하지만 사용시 신경써야 하는 때가 있다.

바로, 공백이 포함된 문자열을 컨트롤러에서 받아서 처리할 때이다.

 

fn:split으로 공백을 처리하면 공백 그자체를 값이 없다고 무시해버린다.

문제는 Java 등에서는 split 메소드에 limit를 이용해 처리할 수 있지만, JSTL에는 처리 가능한 방법이 없는 것으로 보인다.

 

그렇기에 다음과 같은 예제를 fn:split으로 처리하게 되면

 

- 문자열 : ",,치킨,콜라"
- 구분자 : ","
- 반환되는 배열 : ["치킨", "콜라"]

 

위와 같이 배열의 길이가 4가 아닌 2로 처리된다.

 

반응형

 

이는 ["", "", "치킨", "콜라"]와 같이 길이는 유지하고 값만 공백으로 두고 싶을 때, 의도와 다르게 작동할 수 있다.

 

<!-- Controller -->
String food = ",,치킨,콜라";
model.addAttribute("food", food);

<!-- JSP -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<input type="text" value="${fn:split(food, ',')[0]}" />

 

- 의도 : <input type="text" value="" />
- 결과 : <input type="text" value="치킨" />

 

그렇기 때문에 fn:split으로 처리할 때는 공백이 무시되는 점을 고려해 값을 대체하는 등의 처리를 별도로 해주어야 한다.

 

replace로 공백을 대체한 예제 )

 

<!-- Controller -->
String food = ",,치킨,콜라";
food.replace("", "없음");
model.addAttribute("food", food);

<!-- JSP -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<input type="text" value="${fn:split(food, ',')[0]}" />

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글