블로그 이미지
Max.

calendar

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Notice

'ContentNegotiatingViewResolver'에 해당되는 글 1

  1. 2011.09.22 ContentNegotiatingViewResolver + AbstractExcelView 예제(1)
2011.09.22 08:53 개발관련
ContentNegotiatingViewResolver 를 사용하면서 BeanNameViewResolver를 사용한다는게 단순하게 되지 않았다. 아래처럼 설정하면 될것 같지만,

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
   <map>
       <entry key="html" value="text/html"/>
       <entry key="xml" value="text/xml"/>
       <entry key="json" value="application/json"/>
                        <entry key="xls" value="#{ themeExcelView.getContentType() }"/> 
   </map>
</property>
<property name="viewResolvers">
   <list>
   <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>
   </list>
</property>
<property name="defaultViews">
   <list>
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
    </list>
</property>
</bean>



안된다. 무슨 이유인지  viewResolvers 들이 제대로 동작 하지 않는다. 아마도 적절한 key(Header)를 찾지 못하여 매핑이 이루어 지지 않는듯 하다. 해서, ContentNegotiatingViewResolver 에서 매핑되지 않는것을 다시 BeanNameViewResolver로 매핑하게 하면 해결된다. 즉 아래처럼 설정하면, 
 

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
   <map>
       <entry key="xml" value="text/xml"/>
       <entry key="json" value="application/json"/>
   </map>
</property>
<property name="viewResolvers">
   <list>
    <ref bean="beanNameViewResolver"/>
    <ref bean="internalResourceViewResolver"/>
   </list>
</property>
<property name="defaultViews">
   <list>
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
    </list>
</property>
<property name="order" value="1"/>
<property name="ignoreAcceptHeader" value="true"/>
</bean>
    <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="2"/>
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>


ContentNegotiatingViewResolver 에서 매핑되지 않은 뷰들은 아래 뷰리졸버(BeanNameViewResolver)에 의해서 다시 매핑을 시도할것이다. 설정이 어째 중복되는듯해서 찜찜하지만, 어노테이션으로 AbstractExcelView를 확장한 각종 Excel뷰를 매핑하기 위해 어쩔수는 선택이였다.

ContentNegotiatingViewResolver 를 제대로 알면, 우화한 방법이 있을듯 한데...  ContentNegotiatingViewResolverTests.java 를 보면서 좀더 학습해야 할듯 하다. 


 
저작자 표시
신고
posted by Max.
prev 1 next