2014-05-12 1 views
2

이것은 모호하고 웅장한 질문이지만 가능한 한 구체적인 예를 들어 설명하지 않기를 바랍니다.Spring MVC 프레임 워크를 통해 다른 JSP를 포함시키는 것이 좋은 생각인가요?

우리는 최근 애플리케이션 프레임 워크에서 Spring MVC로 전환했지만 개발 중에는 적절한 모델에 동적 뷰를 포함하는 방법을 찾았습니다.

예를 들어 재사용 가능한 조각이 포함 된 페이지를 만듭니다. 왼쪽에는 "random q and a fragment"가 있고 위에는 일반적인 "네비게이션"단편이 있습니다.

이러한 조각에는 각각 다른 모델이 필요합니다. 저는 "탐색"부분을 만들어서 "q와 a"모델, 컨트롤러 및 로직을 완전히 분리 한 탐색 모델, 컨트롤러 및 뷰를 만드는 개발자에게 지시했습니다. 이는 다른 페이지 레이아웃이 "탐색"을 원하지만 "q 및 a"또는 부사를 요구하지 않는 경우 재사용 성을 장려하기위한 것입니다.

어디로 갈까요? "home"페이지에는 두 조각이 모두 포함되어 있지만 조각이 필요로하는 컨트롤러/모델 /보기를 "알지 못하는"것이 좋습니다. 나는 다음과 같은 방식으로 스프링 MVC를 사용하는 개발자를 지시했습니다

.... home.jsp의

예 :

<body> 
    <div class="top"> 
     <jsp:include page="/navigation"/> 
    </div> 
    <div class="left"> 
     <jsp:include page="/randomgQuestion"/> 
    </div> 
</html> 

아이디어는 요청시입니다 필요한 다른 조각 것이다 그들이 필요로하는 모델로 동적으로 끌어 당길 수 있습니다.

이것은 좋은 아이디어입니까? 더 좋은 방법이 있습니까?

모든 토론은 환영합니다. 그러나 건설적이어야합니다.

목표는 재사용 및 바보 뷰입니다.

요청시 모든 업데이트 또는 설명을 제공 할 것입니다. 고맙습니다.

답변

2

UI와 관련하여 Apache Tiles와 Sitemesh는 여기에서 살펴볼 수 있습니다. 컨트롤러 레이어의 관점에서

  • http://wiki.sitemesh.org/wiki/display/sitemesh/Home

    http://tiles.apache.org

    • 는 봄 모델은 모든 컨트롤러 범위에 속성을 배치하는 데 사용할 수있는 @ControllerAdvice 주석이 있습니다. 예를 들어 탐색 모델을 @ControllerAdvice에 배치 한 경우 다른 컨트롤러는이를 모델 속성으로 설정하는 것에 대해 걱정할 필요가 없습니다.

      http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html

      @ModelAttribute 방법

      도 ControllerAdvice-주석 클래스와 같은 방법 @ 에서 정의 할 수있는 모든 컨트롤러에 적용됩니다. @ControllerAdvice 주석은 주석이며 구현 클래스는 클래스 경로 검색을 통해 자동 감지됩니다.

    +0

    아무도 정말로 문제를 언급하지는 않았지만 제안 해 주셔서 감사합니다. 개발자가 템플릿을 선택하고 경로 -> 컨트롤러/모델을 신경 쓰지 않고 JSP를 연결할 수 있기를 바랍니다. JSP를 필요한 모델을 채우는 메소드 세트에 직접 매핑하는 무언가를 만들어야 만하는 것처럼 들립니다. 컨트롤러는 리다이렉트 로직 등을 처리 할뿐입니다. –

    4

    는 무엇을 묘사하는 다른 임베디드 애플리케이션 (포틀릿)에 의해 생성 된 콘텐츠로 구성되는 웹 페이지를 생성하는 포탈/포틀릿 기능 같은 비트 (JSR-286) => 즉 애플리케이션 (포털)를 느낀다. 포털은 JSR-286 기능을 제공하기 위해 (<jsp:include>에 해당)입니다. 따라서이 점에서 <jsp:include>을 사용하여 동일한 요청 특성 네임 스페이스를 공유하지만 각각 고유 한 MVC 수명주기가있는 재사용 가능한 콘텐츠 블록을 제공하는 것이 좋습니다.

    또한 JSP 사이에서 재사용하고 싶은 간단한 조각 인 <%@include file="menu.jspf" %>이 더 적합 할 수 있습니다.

    또한 JSP 태그 기능에 대해 언급해야한다고 생각합니다. 재사용 가능한 콘텐츠를 JSP 태그 파일 (/WEB-INF/tags/[taglib-folder/]*.tag)으로 만들면 몇 가지 고급 레이아웃 기능을 제공 할 수 있습니다. 더 많은 고급 기능을 사용하려면 Java 기반 태그 라이브러리를 구현할 수 있습니다.

    <%@ include file="/WEB-INF/taglib.jspf" %> 
    <layout:admin section="test"> 
        <layout:admin-context /> 
        <layout:admin-content> 
         <h1><spring:message code="test.overview.heading" /></h1> 
         <h2><spring:message code="test.detail.heading" /></h2> 
         <%@ include file="test-detail.jspf" %> 
        </layout:admin-content> 
    </layout:admin> 
    

    우리는 사용 사례가 없었어요, 파견 INCLUDE (:


    나는 사용자 정의 태그를 사용하여 하나 개의 프로젝트에 지침을 포함하고 방법을 설명하려면, 다음은 하나의 JSP보기입니다 즉 <jsp:include />)이 필요합니다.

    +0

    이것은 개발자가 JSP를 간단하게 포함 할 수 있고 모델을로드하기 위해 호출 할 컨트롤러를 알 필요가 없기를 바란다. 그래서, 지금 저는 컨트롤러에 직접 호출하여 모델을로드해야합니다. 하지만 성능 오버 헤드가 걱정됩니다. –

    +1

    "*이 것은 *"당신을 염두에두고있는 답 중 어떤 부분을 다루지 않습니까? INCLUDE 파견을 사용하는 아이디어는 괜찮습니다 ... VIEW에서 MVC를 시작하려면 일부 구성 요소 프레임 워크 (예 : JSF)를 확인해야합니다. 당신의 사고 방식은 아마이 틀의 저자들과 매우 유사 할 것입니다. –

    관련 문제