2012-08-14 3 views
0

에 도움이 필요합니다.VirtualFile을 HTML 템플릿 제공 업체로 사용할 수 있습니까? 그리고 어떻게?

나는 제목이 설명하지만, 여기에 세부 사항

우리가 5 웹 응용 프로그램을 말할 수 있습니다, 그리고 그들이 5 별개의 프레임 워크 완료 말할 수 있기를 바랍니다. 그 중 하나는 playframework를 사용하고 있습니다. 이제 5 개의 웹 사이트를 모두 리브 랜딩하면 하나의 레이아웃 템플릿을 < % doLayout %> 재생 태그가 포함 된 HTML 페이지로 호스팅하는 아이디어를 얻는 데 엄청난 시간이 걸릴 것입니다.

재생 응용 프로그램 소스 코드의 일부이므로이 레이아웃을 사용하는 방법이 필요합니다. 이제 API 문서를 읽고 VirtualFile 클래스 (VirtualFile API Docs)를 발견했습니다. 워드 프로세서는 매우 간단하며이 클래스의 목적이 워드 프로세서에서 무엇인지 알 수는 없지만 여기에 제 사례에 유용 할 수있는 기능이 포함되어 있습니다 ...

다음은 작동하지만 .NET과 동일한 클래스입니다. 전에는 그러한 통합 작업을했지만 지금은 플레이 프레임 워크에서도 필요합니다. 또한 아래 우편 아카이브에서 제공되는 링크에 그 예를 참고하지만, VirtualPathProviders 당신은 어떤 도움 상점, 솔루션 VirtualFile을 포함 할 필요가 없습니다, 감사합니다 어디 Virtualizing Access to Content

에서 템플릿을 제공 할 수 있지만 플러그인해야 그리고 놀자.

참고 : 우리는 playframework 1.2.1

감사

답변

0

내 문제에 대한 해결책을 찾았을 사용하지만 가상 파일 클래스된다. 내가보기에 extend 태그를 대체 할 사용자 정의 태그를 만든다면 그럴 수 있습니다.

당신이 플레이 소스 코드를 보면 당신은 그냥 문자열로 템플릿을 받아들이는 방법 TemplateLoader.load(String, String)는 (원래의 구현 파일 이름에 비교) 오버로드 설정 한 다음 사용해야하는 방법 기존 작품 FastTags class, line 319

public static void _extends(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) { 
    try { 
     if (!args.containsKey("arg") || args.get("arg") == null) { 
      throw new TemplateExecutionException(template.template, fromLine, "Specify a template name", new TagInternalException("Specify a template name")); 
     } 
     String name = args.get("arg").toString(); 
     if (name.startsWith("./")) { 
      String ct = BaseTemplate.currentTemplate.get().name; 
      if (ct.matches("^/lib/[^/]+/app/views/.*")) { 
       ct = ct.substring(ct.indexOf("/", 5)); 
      } 
      ct = ct.substring(0, ct.lastIndexOf("/")); 
      name = ct + name.substring(1); 
     } 
     BaseTemplate.layout.set((BaseTemplate) TemplateLoader.load(name)); 
    } catch (TemplateNotFoundException e) { 
     throw new TemplateNotFoundException(e.getPath(), template.template, fromLine); 
    } 
} 

찾을 수 있습니다 그것을 BaseTemplate.layout.set(...) 방법으로한다. 물론 HTTP 요청을 통해 원격 서버에서 템플릿을 가져와야합니다.

관련 문제