2009-12-07 3 views
2

내 앱은 런타임에 여러 고객을 지원해야합니다. 그들은 모두 동일한 컨트롤러, 서비스를 사용하지만 레이아웃, CSS 및 이미지가 다른 동일한 데이터를 표시합니다. ( 렌더링보기 :어떻게 사용자 정의 된 모양과 느낌으로 단일 grails 애플리케이션에서 여러 고객을 처리 할 수 ​​있습니까?

1) 인증과 세션 2) 내 컨트롤러 코드는이 라인을 따라 뭔가를 호출의 설정 값을 설정하기 위해 필터가 다음과 같이

내 기본적인 생각이다 "/ $ {session.userContext}/테스트/테스트 ") 우리가 렌더링 1 고객에 대한 그래서

:보기/1 고객/테스트 이상적/test.gsp

나는에있는 모든 사용자 정의보기 및 레이아웃을 가지고 싶습니다/views/customer1/directory하지만 사이트 메쉬는/views/layouts 디렉토리의 레이아웃을 찾지 만 fi 할 수는 없습니다. 이 문제를 피하십시오. 이런 의미에서 솔루션은 내가 원하는 수준의 격리 수준을 얻지 못하기 때문에 다소 경솔합니다.

grails render 메소드의 루트를 런타임에 설정할 수 있다면 이상적입니다. 보기에서 시작하는 대신보기/customer1 아아 나는 어떻게 해야할지 모르지만 그의 스마트 솔루션 것으로 보인다.

모든 도움을 주시면 감사하겠습니다. 내가 GrailsLayoutDecoratorMapper의 서브 클래스를 생성 해 보길 추천 할 것입니다

건배,

개브

답변

2

. 전체 HttpServletRequest에 액세스 할 수 있으므로 한 고객을 다른 고객과 구별하는 방법 (도메인, 세션 변수 등)에 따라 다른보기를 렌더링 할 수 있습니다. 현재 요청에 대한 적절한보기/레이아웃을 결정할 수 없다면 GrailsLayoutDecoratorMapper에 위임하여 기본 동작을 유지하면됩니다.

사용자 정의 DecoratorMapper를 구성하려면 /web-app/WEB-INF/sitemesh.xml을 수정하고 기본값 <mapper class="org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper" />을 사용자 정의 구현으로 바꿔야합니다.

1

체크 아웃 Multi-Tenant plugin - 앱의 나머지 부분에서도 도움이 될 것 같습니다.

당신은 레이아웃의 이름으로 전달하여, 컨트롤러에서 layouts을 지정 처리해야합니다 - 나는 기본 레이아웃 데코레이터 매핑을 무시하지 않고 당신은 당신의 레이아웃을 분리 Grails를 얻을 수있을 거라고 생각하지 않는다><meta name="layout" content="$layoutName"> 콩.

+1

그의 요구 사항이 고객마다 다른 레이아웃 일 경우 Multi-Tenant 플러그인은 자신의 요구를 직접적으로 해결하지 않으면 서 매우 큰 오버 헤드를 추가합니다. 그가 정말로 멀티 테넌트 애플리케이션 (고객 행동, 룩앤필, 보안 등)을 필요로한다면, 플러그인은 완벽하게 적합합니다. –

관련 문제