2011-05-16 4 views
1

미리 도움을 요청 해 주셔서 감사합니다.스프링 MVC, 타일, 다중 컨트롤러

다음 프로젝트에서 Spring MVC를 실험하고있다. 여러 재사용 가능한 "구성 요소"를 렌더링하려면 응용 프로그램에서 일부 웹 페이지가 필요하고 Tiles가이 작업을 수행하는 데 도움이된다고 생각하십니까? 각 구성 요소에는 자체 컨트롤러가 있습니다.

예를 들어 설명해 보면 부분적으로 만 작동합니다. 3 개의 타일이있는 페이지입니다. 세 번째 타일에는 @ModelAttribute 주석을 통해 ArrayList를 클라이언트에 반환하려고하는 컨트롤러가 있지만 뷰가 타일로 포함되면 ArrayList는 비어 있습니다.

여기 *의 -servlet.xml을의 타일 설치는 다음과 같습니다

<tiles-definitions> 
    <definition name="parent" template="/WEB-INF/jsp/tiles/parent_layout.jsp"> 
     <put-attribute name="header" value="/WEB-INF/jsp/tiles/header.jsp"/> 
     <put-attribute name="body" value=""/> 
     <put-attribute name="recordsSection" value=""/> 
     <put-attribute name="widgetsSection" value=""/> 
    </definition> 
     <definition name="_n/list.htm" extends="parent"> 
      <put-attribute name="recordsSection" value="/WEB-INF/jsp/_n/list.jsp"/> 
      <put-attribute name="widgetsSection" value="/WEB-INF/jsp/_n/widgets.jsp"/> 
     </definition> 
</tiles-definitions> 

가 여기에 문제의 타일 뒤에 JSP 코드입니다 :

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/> 
     <property name="order" value="0"/> 
</bean> 

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
     <property name="definitions"> 
      <list> 
       <value>/WEB-INF/tiles-config/tiles.xml</value> 
      </list> 
     </property> 
</bean> 

<bean id="viewResolver2" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="order" value="1" /> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
     <property name="prefix" value="/WEB-INF/jsp/"/> 
     <property name="suffix" value=".jsp"/> 
</bean> 

여기 내 타일 설정 (tiles.xml)입니다. "widgetsList"표현식은 컨트롤러 메소드에 바인딩되지만이 뷰가 타일로 포함될 때 다시 비어있게됩니다. 여기

<%@page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isELIgnored="false"%> 
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@taglib prefix="display" uri="http://displaytag.sf.net" %> 

<h3>Widgets</h3> 
<p>widgetsList=${widgetsList}</p> 
<div id="displaylist"> 
    <display:table id="items" name="${widgetsList}" cellspacing="0" export="true"> 
     <display:column title="Widget ID" property="widgetId"/> 
     <display:column title="Widget Name" property="widgetName"/> 
     <display:column title="Widget State" property="widgetState"/> 
    </display:table> 
</div> 

는 컨트롤러의 :

@Controller 
public class WidgetController { 

    @Autowired 
    private WidgetDaoImpl widgetDao = new WidgetDaoImpl(); 

    @RequestMapping("_n/widgets.htm") 
    public String widgets() { 
     return "_n/widgets.htm"; 
    } 

    @ModelAttribute("widgetsList") 
    public ArrayList<Widget> getWidgets() { 
     System.out.println("executing getWidgets()"); 
     ArrayList<Widget> records = widgetDao.listWidgets(); 
     return records; 
    } 
} 

내가 "widgets.jsp"는 견해를 직접 액세스은 "widgetsList"속성은이 그것을 반환 타일로 추가 때 그것은 단지의 채워됩니다 아무것도.

여기에 대한 조언을 주셔서 감사합니다.

답변

1

타일은 합성보기 만 제공하며 컨트롤러는 하나의보기 만 반환 할 수 있습니다.이 경우 전체 타일 정의 페이지가 단일 컨트롤러에 의해 반환됩니다.

타일 구성에 대한 경험이별로 없지만 타일 요소로 컨트롤러 매핑 된 URL (JSP 제외)을 사용할 수있는 경우에만 가능하며 타일 프로세서가 호출합니다 각 "구성 요소"에 대한 스프링 컨트롤러.

하지만 컴포넌트에 대해 이야기하고 있기 때문에 여기에 컴포넌트가 필요하기 때문에 컴포넌트 지향 프레임 워크 (Wicket은 Spring의 out-of-the-box와 쉽게 통합 될 수 있습니다)로 시작하지 않으십시오.

+0

감사를 사용하여 스프링 컨트롤러에서

$.ready(){ if($('div#displayWidgets')){ $.getJSON('/widgetsList', function(data) { //loop over json and create your html, url below has great examples } } } 

http://api.jquery.com/jQuery.getJSON/ JSON 튜토리얼. 나는 그것이 아닌 것을 무언가로 타일을 만들려고 노력하고있는 것 같다.이 시점에서 컴포넌트 기반 프레임 워크를 내 프로젝트에 통합하는 것이이 시점에서 약간의 과잉이 될 수 있습니다. 이후 아마 이런 종류의 일을 아마 6 번 수행해야하기 때문입니다. 결과적으로 내 컨트롤러 클래스 중 일부는 꽤 다루기 힘들어 질 것입니다. 다시 한 번 감사드립니다! – wannabecoder

1

jQuery, ajax 및 json을 타일로 사용하면서 패턴을 발견했습니다. 페이지에 당신은 당신의 위젯 페이지로드에이 사업부에 대한 jQuery를 체크와

<div id="displayWidgets"></> 

같은 마커 사업부를 포함하고이 콘텐츠에 대한 컨트롤러에 json으로 전화를 할 수있는 경우합니다. 아래의 javascript를 포함 시키면 각 페이지의 컨트롤러가 자체 페이지를 제외한 모델 정보를 알 필요가 없기 때문에이 방법이 유용합니다. 내가 동적 인 머리말과 꼬리말 같은 일반적인 정보를 채우기 위해 이것을 사용합니다. 잭슨 당신의 응답을 http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/