Themes

Dev.Hammy·2024년 3월 26일
0
post-custom-banner

Spring Web MVC 프레임워크 테마를 적용하여 애플리케이션의 전반적인 모양과 느낌을 설정함으로써 사용자 경험을 향상시킬 수 있습니다. 테마는 애플리케이션의 시각적 스타일에 영향을 미치는 정적 리소스(일반적으로 스타일 시트 및 이미지)의 모음입니다.

[Warning]
6.0부터 테마 지원은 CSS 사용을 위해 더 이상 사용되지 않으며 서버 측에서는 특별한 지원이 없습니다.

Defining a theme

웹 애플리케이션에서 테마를 사용하려면 org.springframework.ui.context.ThemeSource 인터페이스의 구현을 설정해야 합니다. WebApplicationContext 인터페이스는 ThemeSource를 확장하지만 그 책임을 전용 구현에 위임합니다. 기본적으로 위임은 클래스 경로의 루트에서 속성 파일을 로드하는 org.springframework.ui.context.support.ResourceBundleThemeSource 구현입니다. 사용자 정의 ThemeSource 구현을 사용하거나 ResourceBundleThemeSource의 기본 이름 접두사를 구성하려면 예약된 이름 themeSource를 사용하여 애플리케이션 컨텍스트에 Bean을 등록할 수 있습니다. 웹 애플리케이션 컨텍스트는 해당 이름의 Bean을 자동으로 감지하여 사용합니다.

ResourceBundleThemeSource를 사용하면 테마가 간단한 속성 파일에 정의됩니다. 속성 파일에는 다음 예제와 같이 테마를 구성하는 리소스가 나열됩니다.

styleSheet=/themes/cool/style.css
background=/themes/cool/img/coolBg.jpg

속성의 키는 뷰 코드에서 테마 요소를 참조하는 이름입니다. JSP의 경우 일반적으로 spring:message 태그와 매우 유사한 spring:theme 사용자 정의 태그를 사용하여 이 작업을 수행합니다. 다음 JSP 조각은 이전 예제에서 정의된 테마를 사용하여 모양과 느낌을 사용자 정의합니다.

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html>
	<head>
		<link rel="stylesheet" href="<spring:theme code='styleSheet'/>" type="text/css"/>
	</head>
	<body style="background=<spring:theme code='background'/>">
		...
	</body>
</html>

기본적으로 ResourceBundleThemeSource는 빈 기본 이름 접두사를 사용합니다. 결과적으로 속성 파일은 클래스 경로의 루트에서 로드됩니다. 따라서 cool.properties 테마 정의를 클래스 경로 루트의 디렉토리(예: /WEB-INF/classes)에 배치합니다. ResourceBundleThemeSource는 표준 Java 리소스 번들 로딩 메커니즘을 사용하여 테마의 완전한 국제화를 허용합니다. 예를 들어, 네덜란드어 텍스트가 있는 특수 배경 이미지를 참조하는 /WEB-INF/classes/cool_nl.properties가 있을 수 있습니다.

Resolving Themes

이전 섹션에 설명된 대로 테마를 정의한 후 사용할 테마를 결정합니다. DispatcherServlet은 사용할 ThemeResolver 구현을 찾기 위해 themeResolver라는 빈을 찾습니다. 테마 resolver는 LocaleResolver와 거의 동일한 방식으로 작동합니다. 특정 요청에 사용할 테마를 감지하고 요청 테마를 변경할 수도 있습니다. 다음 표에서는 Spring에서 제공하는 테마 해결 프로그램에 대해 설명합니다.

표 1. ThemeResolver 구현체
클래스 설명

FixedThemeResolver

사용자가 설정한 고정 테마를 선택합니다. defaultThemeName 속성을 사용하여 설정합니다.

SessionThemeResolver

테마가 사용자의 HTTP 세션에 유지됩니다. 각 세션마다 한 번만 설정하면 되지만 세션 간에는 지속되지 않습니다.

CookieThemeResolver

선택한 테마가 클라이언트의 쿠키에 저장됩니다.

Spring은 또한 간단한 요청 매개변수를 사용하여 모든 요청에 ​​대해 테마를 변경할 수 있는 ThemeChangeInterceptor를 제공합니다.

post-custom-banner

0개의 댓글