복붙노트

[SPRING] 어느 spring view resolver가 angularjs와 잘 맞습니까?

SPRING

어느 spring view resolver가 angularjs와 잘 맞습니까?

나는 anglejs와 spring mvc를 REST 서비스 프로 바이더와 부분 뷰 공급자 (나는 다중 앵글 부분을 가질 수 있도록 앵귤러 UI 라우터를 사용하고있다.)로 사용하는 웹 애플리케이션을 작성하고있다. 나는 모든 각도에서 모든 일을 할 계획이기 때문에 현재 템플릿 언어에 대한 사용법은 없지만 모든 단일보기 해석기는 각도와 충돌하고 응용 프로그램을 충돌 시키거나 내 로그를 채우는 템플릿 언어 유형을 가지고 있습니다. 오류가 있습니다.

먼저 InternalResourceViewResolver를 사용해 보았지만 행운이 없다는 것은 .jsp 파일 만 기대하고 다른 것은 표시하지 않는 것 같습니다.

그런 다음 Thymeleaf를 사용해 보았습니다. Thymeleaf는 xml 요구 사항을 따르기 위해 대부분의 html을 다시 작성해야하는 XML 표준을 따르며,이를 수행 한 후에 ng-show 지시어 내에서 &&를 만났을 때 사망했습니다. 그래서 그걸로 운이 없다.

그런 다음 Velocity를 시도했습니다. 나는 지금까지 속도와 함께 가장 운이 좋았다. html 파일을 멋지게 처리하고, 구문 분석 오류가 발생하면 멈추지 않고 InternalResourceViewResolver와 동일한 방식으로 부분 뷰를 제공합니다. 그러나 $ Velocity 접두사가 붙은 각도 변수를 만나면 변수를 VTL 변수로 구문 분석하고 로그에 다음과 같은 메시지를 채 웁니다.

velocity - 널 참조 [template 'clients / createOrEdit.html', line 1, column 65] : $ invalid를 해결할 수 없습니다.

모든 것이 제대로 작동하지만 VTL을 사용하지 못하게하는 방법을 찾지 못했습니다.

뷰 확인자에 대한 내 경험입니다.

나는 또한 mvc : resources를 사용하여 정적 리소스 (.html이 다소 마술 적이기도 전에) 인 .html 파일을 다루는 아이디어를 가지고 있었지만, 어떤 resolver resolver도없이 main layout.html을 다음과 같이 설정해도 애플리케이션이 시작되지 않았다. web.xml의 환영 파일이됩니다.

내 질문은. 각도 분석기로 사용하여 각도 분석기와 함께 사용할 수 있도록해야하며보기 확인자를 사용해야하는 경우에도 사용해야합니다.

편집 : 나는 ContentNegotiatingViewResolver를 사용하려고 노력하고있어.

DEBUG ContentNegotiatingViewResolver - Requested media types are [text/html] based on Accept header types and producible media types [*/*])
DEBUG ContentNegotiatingViewResolver - No acceptable view found; returning null
DEBUG DispatcherServlet - Could not complete request
javax.servlet.ServletException: Could not resolve view with name 'layout.html' in servlet with name 'springDispatcherServlet'

webapp-config.xml (Dispatcher 서블릿의 contextconfig)

    <mvc:annotation-driven />

    <!-- Resources -->
    <mvc:resources location="/libs/" mapping="/libs/**" />
    <mvc:resources location="/css/" mapping="/css/**" />
    <mvc:resources location="/js/" mapping="/js/**" />
    <!-- Angular application data -->
    <mvc:resources location="/WEB-INF/appjs/" mapping="/appjs/**" />
    <!-- View locations -->
    <mvc:resources location="/WEB-INF/html/" mapping="/**"/>

    <!-- Controllers -->
    <context:component-scan base-package="com.mrplow.controller" />

    <!-- Views -->
    <util:map id="contentMediaTypes">
        <entry key="json" value="application/json" />
        <entry key="html" value="text/html" />
    </util:map>

<!--    <util:list id="defaultViews"> -->
<!--        <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />       -->
<!--    </util:list> -->

    <bean id="viewResolver" class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"
    p:order="1"
    p:ignoreAcceptHeader="false"
    p:defaultContentType="text/html"
    p:mediaTypes-ref="contentMediaTypes" /> 

LayoutController.java

@Controller
@RequestMapping("/")
public class LayoutController {

    @RequestMapping
    public String getIndexPage() {
        return "layout";
    }
}

해결법

  1. ==============================

    1.봄에 정적 리소스 (html, css, img, js)를 사용하려면 다음과 같은 디렉토리 구조를 사용하십시오.

    봄에 정적 리소스 (html, css, img, js)를 사용하려면 다음과 같은 디렉토리 구조를 사용하십시오.

    src/
       package/
       LayoutController.java
    WebContent/
       WEB-INF/
        static/
          html/
           layout.html
          images/
           image.jpg
          css/
           test.css
          js/
           main.js
         web.xml
        springmvc-servlet.xml
    
    
    
    @Controller 
    public class LayoutController {
    
     @RequestMapping("/staticPage") 
    public String getIndexPage() { 
    return "layout.htm"; 
    
    } }
    
    
    
      <!-- in spring config file -->
     <mvc:resources mapping="/static/**" location="/WEB-INF/static/" />
    

    layout.html

    <h1>Page with image</h1>
    <img src="/static/img/image.jpg"/>
    

    참고로 /static/img/image.jpg는 /image.jpg가 아니라 .. css와 js에도 동일하게 적용됩니다.

    또는

    아래와 같이 컨텐트 협상보기 확인자를 사용할 수도 있습니다.

     <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
              <property name="order" value="1" />
              <property name="mediaTypes">
                <map>
                   <entry key="json" value="application/json" />
                   <entry key="xml" value="application/xml" />
                   <entry key="rss" value="application/rss+xml" />
                    <entry key="html" value="text/html"/>
                </map>
              </property>
    
              <property name="defaultViews">
                <list>
                  <!-- JSON View -->
                  <bean
                    class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                  </bean>
    

    Spring MVC는 일치하지 않으면 "mediaTypes"속성에 선언 된 파일 확장자를 기반으로 적절한 뷰를 반환하기 위해 "ContentNegotiatingViewResolver"(order = 1)를 사용하고 "InternalResourceViewResolver"(order = 2)를 사용하여 기본 JSP 페이지를 반환합니다 .

    <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="order" value="2" />
            <property name="prefix">
                <value>/WEB-INF/pages/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>
    

    이제 JSP에서 정적 HTML 페이지로 리디렉션 할 수 있습니다.

       @Controller
        public class LayoutController {
    
            @RequestMapping("/index")
            public String getIndexPage() {
                return "index";
            }
    
        }
    

    index.jsp

    <form:form method="GET" action="/static/html/layout.html">
    

    이제 http://yourapp.com//index를 통해 서비스에 액세스하십시오. 위에서 언급 한 양식 작업을 보여줍니다. layout.html을 보여줍니다.

    버튼을 클릭하거나 jsp 페이지로 제출하여 layout.html 페이지를 호출하십시오.

  2. ==============================

    2.나는 ContentNegotiatingViewResolver가 Jackson2와 통합하여 JSON, XML 또는 HTML 텍스트로 응답하는 데 필요한 응답 유형 중 가장 적합한보기 결정자라고 생각합니다.

    나는 ContentNegotiatingViewResolver가 Jackson2와 통합하여 JSON, XML 또는 HTML 텍스트로 응답하는 데 필요한 응답 유형 중 가장 적합한보기 결정자라고 생각합니다.

    예를 들어,이 방법을보십시오.

    http://hillert.blogspot.com.es/2011/01/rest-with-spring-contentnegotiatingview.html

  3. ==============================

    3.Spring의 새로운 버전에서 ContentNegotiatingViewResolver를 사용하여 솔루션을 만드는 방법을 모색하는 사람들을 위해 :

    Spring의 새로운 버전에서 ContentNegotiatingViewResolver를 사용하여 솔루션을 만드는 방법을 모색하는 사람들을 위해 :

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="contentNegotiationManager" ref="contentNegotiationManager"/>
        <property name="defaultViews">
            <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
        </property>
    </bean>
    

    그런 다음 ContentNegotiationManagerFactoryBean에 필요한 확장 기능을 구성하십시오.

    <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="mediaTypes">
            <props>
                <prop key="json">application/json</prop>
                <prop key="html">text/html</prop>
                <prop key="xml">application/xml</prop>
                // and so on
            </props>
        </property>
    
        <property name="ignoreAcceptHeader" value="true"/>
    </bean>
    
  4. from https://stackoverflow.com/questions/24838165/which-spring-view-resolver-plays-nice-with-angularjs by cc-by-sa and MIT license