2012-10-23 4 views
0

나는 그것의 문자열 속성 (내용) 중 하나가 스칼라 템플릿 코드 포함된다 모델 (페이지) 채우는 해요 :@Html를 사용하여로드 코드() 내에서 routes.Assets.at @ 2.0 재생

<img src="@routes.Assets.at("images/image.gif")" alt="alt text" /> 

에서을 내가 모델 전달 내 스칼라 템플릿 : routes.Assets.at은 자산 경로로 해결되지 @

@(page: models.Page) 
@Html(page.getContent()) 

, 예상대로.

  1. Play 2.0에이 목적을 위해 eval() 유형 유틸리티 기능이 있습니까?
  2. 또는 컨트롤러 내에서 에셋 경로가 나타내는 실제 경로를 파생시킬 수 있습니까? 그때 이후 문자열이

편집을 대체 수행 할 것 - 더 컨텍스트 제공 :

컨트롤러 코드 :

ObjectMapper mapper = new ObjectMapper(); 
Page page = new Page(); 
// TODO: request().uri() mapping to json resource 
File x = Play.current().getFile("/content/index.json"); 
try { 
    page = mapper.readValue(x, Page.class); 
} catch (JsonParseException e) { 
    e.printStackTrace(); 
} catch (JsonMappingException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    return notFound(); 
} 

모델 코드 :

public void setContent(String content) { 
    // TODO: replace to resolve assets route 
    this.content = StringEscapeUtils.unescapeHtml4(content); 
} 

는 솔루션이나 의견 감사합니다 접근 방식.

감사

+1

서식 파일로 전달하기 전에 경로를 확인하지 않는 이유는 무엇입니까? – biesior

+0

포인트 2 당. 나는 이것이 컨트롤러 내에서 일어날 것이라고 추정한다. 그러나 어떻게? – raq

+1

문자열을 평가하는 컨트롤러 코드에서 XML 리터럴로 처리 할 수 ​​있습니다. '' –

답변

1

당신은 하나의 기본적인 일을 실현한다 : 당신이 모든 @routes.Assets.at()를 사용하는 필요하지 않습니다 - 그것은 단지 도우미, 그러나 특별한 의미가 없습니다. 그래서 당신의 코드에서 해결 경로를 넣어 :

<img src="/assets/images/image.gif" alt="alt text" /> 

당신이 정말로, 정말로 동적 경로의 가능성을 유지하려면 쉽게 replace() 방법을 대체 할 수있는 코드에서 자신의 마커를 사용하는 경우 :

<img src="###ASSETS_FOLDER###/images/image.gif" alt="alt text" /> 

(물론 기본 위치입니다. 다른 것이 있으면 변경하십시오.)

+0

예 - 그럴 필요가 있습니다. 하지만 사물의 정신을 유지하면서이 가치를 바꿀 수있는 단일 장소를 갖는 것이 좋을 것입니다 :) – raq

+0

ach, my bad; 물론 기본적으로'/ assets /'이 아닌'/ public /'입니다. 죄송합니다. – biesior

+1

@raq : ... 또는 마커 만 사용하십시오. 내 편집 – biesior