문제

TILE/JSP가있는 스프링 MVC 웹 응용 프로그램을 뷰 기술로 구축하고 있습니다. 이전에는 수업 공통의 일반적인 이미지로가는 경로를 저장했습니다.

 public final static String IMG_BREADCRUMBS_NEXT = "/shared/images/famfam/bullet_arrow_right.png";

그런 다음 JSP 에서이 클래스를 사용하여 이미지 SRC를 얻을 수 있습니다.

 <img src="<%= Common.IMG_BREADCRUMBS_NEXT %>"/>

JSP 코드에서 Scriptlets를 제거하고 대신 JSTL 등을 사용하고 싶습니다. 이런 종류의 정보를 저장하는 가장 좋은 방법은 무엇입니까? 리소스 번들입니까? 이것을 어떻게 해결 했습니까?

도움이 되었습니까?

해결책

결국 나는 Spring의 테마 지원을 사용하여 내가 원하는 것을 달성했습니다. 내보기 코드에서 나는 그것을 사용한다 <spring:theme code=""/> 이미지 파일로가는 경로를 얻으려면 태그 :

 <img src="<spring:theme code="theme.images.actions.edit.link"/>" />

이 태그는 어떤 것처럼 행동합니다 <fmt:message> 또는 <spring:message> 태그, 그러나 자체 "메시지 번들"이 있습니다. 내 ApplicationContext의 필요한 구성은 다음과 같습니다.

 <!-- 
    ========================================================= 
    Themes
    =========================================================
  -->
<bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver">
    <property name="defaultThemeName" value="themes.default"/>
</bean>
<bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource" />    

내 응용 프로그램의 모든 테마는 아래에 저장됩니다 /WEB-INF/classes/themes/. 기본 테마 속성이 있습니다 /WEB-INF/classes/themes/default.properties다음과 같이 보입니다.

 ...
 theme.images.actions.show.link=/@contextPath@/shared/images/famfam/zoom.png
 theme.images.actions.delete.link=/@contextPath@/shared/images/famfam/cross.png
 ...

내 앱의 테마 (및 아이콘)를 변경하려면 themechangeinterceptor (ApplicationContext)를 사용합니다.

<!--
========================================================= 
Theme resolving
=========================================================
--> 
<bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
    <property name="paramName" value ="theme" />
</bean>

이를 통해 사용자는 테마를 "&theme=themes.default" 또는 "&theme=themes.alternative" 요청 매개 변수.

내 설정의 핵심 부분 중 하나는 다음과 같습니다 @contextPath@ 테마 속성 파일에서. 이는 ANT 빌드 프로세스 중에 개발/테스트/생산 환경을위한 올바른 컨텍스트 경로로 대체됩니다. 내 build.xml의 핵심 부분은 다음과 같습니다.

    <!-- copy all common themes to classes -->
    <copy todir="${build.war}/WEB-INF/classes/themes" overwrite="true" filtering="true">
        <fileset dir="resources/themes" includes="**/*.properties" />
        <filterchain>
           <replacetokens>
                <token key="contextPath" value="${setup.contextPath}"/>
            </replacetokens>
        </filterchain>
    </copy>

이것이 스프링 웹 앱 테마에서 "실행 시작"을 제공하기를 바랍니다. 제 생각 에이 설정은 응용 프로그램의 모양과 느낌을 쉽게 변경할 수 있습니다.

참조 :

다른 팁

응용 프로그램 범위에서 구성 Bean을 사용하므로 다음과 같은 것을 쓸 수 있습니다.

<img src="${configuration.imagePath}/icon.png">

나는 스프링을 사용하지 않지만, 종속성 주입을 사용하여 Jboss 및 Seam에서 우리가하는 일과 비슷한 일을 할 수 있습니다.

기본적으로, 우리는 XML 구성 (실제로 JBoss mbean이지만 주제를 벗어난)에서로드 된 애플리케이션의 구성 매개 변수 인 CONFIGURATION이라는 POJO 클래스가 있습니다. 이 예에서는 콩이 a를 가질 것입니다 getImagePath() 방법.

Seam은 'Application'범위에서 구성 Bean의 단일 인스턴스를 인스턴스화하여 위와 같은 표현식에서 항상 사용할 수 있도록합니다.

데이터베이스를 기반으로 테마를 결정한 클래스를 사용하는 것이 더 강력하지 않습니까? 이를 통해 사용자는 시간 또는 사용자 에이전트를 기반으로 테마를 관리하고 테마를 구현할 수 있습니까?

사용자 세션에서 테마를 저장하기 위해이 작업을 수행하고 스프링 테마를 동시에 사용할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top