2011-01-25 4 views
8

메뉴와 같이 여러 페이지에 걸쳐 공통적 인 UI 부분을 갖고 싶다면이를 위해 권장되는 방법은 무엇입니까?Play Framework에서 "미리보기"를 지원합니까?

템플릿 코드와 백 엔드 컨트롤러가 모두 포함됩니다 (LiftWeb 프레임 워크의 "스 니펫"과 비슷 함).

Play 용 메뉴 모듈이 있다는 것을 알고 있지만 일반적으로 이것이 어떻게 달성 될지 더 관심이 있습니다.

답변

11

일반보기 코드를 Play 프레임 워크에 포함시키는 데는 두 가지 방법이 있습니다.

#{include} 태그 또는 #{extends} 태그를 사용할 수 있습니다.

확장 태그는 이름에서 알 수 있듯이 상위보기에서 확장됩니다. extends 태그는 새 애플리케이션을 만들 때 Play가 설정 한 스켈레톤 코드에서 기본적으로 사용됩니다. main.html을 확장합니다. 여기에 코드를 추가하십시오.

includes 태그를 사용하면 지정된 시점에 서식 파일에 공통된보기 코드를 삽입 할 수 있습니다. 이것은 PHP에서 include/require 또는 jsp가 포함 된 것과 거의 동일하게 작동합니다.

템플릿 코드에서도 컨트롤러를 통해 모델의 데이터 또는 로직을 요구할 때 문제가 발생합니다. 이 경우 컨트롤러의 @Before 또는 @With 표기법을 사용하여 매번 컨트롤러 코드의 공통 부분이 실행되도록해야합니다. 모든 데이터를 renderArgs 목록에 추가하여 뷰에서 사용할 수 있습니다.

renderArgs를 사용하는 간단한 예는 다음과 같습니다.

@Before 
private static void commonData() { 
    // do your logic here 
    renderArgs.put("menu", menu); 
    renderArgs.put("selected", selectedMenuItem); 
} 

당신이 renderArgs에 넣어 (메뉴의 예에서 선택) 당신이 렌더링 방법으로 그들을 전달 된 것처럼 그냥 같은 방법으로 사용할 수있는 값.

+0

고맙습니다 - renderArgs를 사용하는 모든 예제 코드를 가르쳐 주시겠습니까? – sanity

+3

코드 샘플이 추가되었습니다. – Codemwnci

+0

@Codemwnci 내 renderArgs {}에서 비어 있거나 null 값이 나타납니다. 성공적인 로그인시 나는 renderArgs에 맵을 저장했고 renderArgs.get (login_det '). toString()을 사용하여 콘솔에 모든 값을 인쇄했습니다. 다른 컨트롤러에서 동일한 것을 사용할 때 {}와 같이 renderArgs를 얻습니다. 여기에서 문제가 될 수 있습니다. – Arasu

관련 문제