Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪个spring视图解析器可以很好地处理angularjs?_Spring_Angularjs_Spring Mvc - Fatal编程技术网

哪个spring视图解析器可以很好地处理angularjs?

哪个spring视图解析器可以很好地处理angularjs?,spring,angularjs,spring-mvc,Spring,Angularjs,Spring Mvc,我正在使用angularjs和SpringMVC编写一个webapp,作为REST服务提供者和部分视图提供者(我还使用AngularUI路由器,这样我就可以有多个嵌套部分)。我目前不使用任何模板语言,因为我计划在angular中执行所有操作,但是我尝试过的每个视图解析器都有某种类型的模板语言与angular冲突,要么使应用程序崩溃,要么使我的日志充满错误 首先,我尝试使用InternalResourceViewResolver,但没有成功,因为它似乎只需要.jsp文件,不会显示任何其他内容 然后

我正在使用angularjs和SpringMVC编写一个webapp,作为REST服务提供者和部分视图提供者(我还使用AngularUI路由器,这样我就可以有多个嵌套部分)。我目前不使用任何模板语言,因为我计划在angular中执行所有操作,但是我尝试过的每个视图解析器都有某种类型的模板语言与angular冲突,要么使应用程序崩溃,要么使我的日志充满错误

首先,我尝试使用InternalResourceViewResolver,但没有成功,因为它似乎只需要.jsp文件,不会显示任何其他内容

然后我试着用百里香。Thymeleaf遵循XML标准,该标准迫使我重写大部分html以满足XML要求,之后在ng show指令中遇到
&&
时,它就消失了。所以这也没什么好运气

然后我尝试了速度。到目前为止,我在速度方面运气最好。它很好地提供html文件,在遇到解析错误时不会停止,并允许我像InternalResourceViewResolver一样提供部分视图。然而,当遇到前缀为
$
的角度变量时,Velocity会尝试将它们解析为VTL变量,并在我的日志中填充如下消息

velocity-Null引用[模板'clients/createOrEdit.html',第1行,第65列]:$invalid无法解析。

一切都在正常工作,但我不是那个只留下错误的人,我也没有找到禁用VTL的方法

这是我目前使用视图解析器的经验

我还想到了使用
mvc:resources
将.html文件视为静态资源(它们有点像angular那样神奇),但如果没有任何视图解析器,即使我将main layout.html设置为web.xml中的欢迎文件,我的应用程序也无法启动

我的问题是。我应该使用什么作为视图分解器,以便它能够很好地处理angularjs,以及我是否应该使用视图分解器

编辑:我正在尝试使用
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 servlet中的contextconfig)


我认为ContentNegotiatingViewResolver是最好的视图解析器,因为您可以将它与Jackson2集成,以响应JSON、XML或HTML文本中的数据以及您需要的其他响应类型

例如,看看这个方法


为了在spring中使用静态资源(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/" />
index.jsp

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

现在,尝试通过/index来访问您的服务。显示上面提到的表单操作。它将显示layout.html

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

单击按钮或在jsp页面中提交,以调用layout.html页面

,供寻求如何使ContentNegotingViewResolver解决方案在新版本的Spring中工作的人员使用:

<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>

应用程序/json
文本/html
应用程序/xml
//等等

谢谢。不过有一个问题。媒体类型提到xml-application/xml。这也是html文件的原因吗?是的,你可以用它来处理html。我已经更新了我的答案。请核对我的答案。还有一个问题。it在哪里查找文件?它似乎找不到我的观点。我将用当前配置更新OP我已经更新了我的答案。请更新您的配置。希望它能解决您的问题!我已经照你说的做了,但还是犯了同样的错误。我还尝试将
return“layout.html;”“
更改为
return”html/layout.html;”“
,但没有区别。不过有一个问题。媒体类型提到xml-application/xml。这也解释了html文件?我不知道我是否理解你的问题。但HTML文件的内容类型是“text/HTML”,而不是“application/xml”。在谷歌搜索,你可以找到所有资源的不同内容类型。另一方面,了解@RequestMapping和consumes/Products属性,用于在方法级别指定所有问题。
<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>
   @Controller
    public class LayoutController {

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

    }
<form:form method="GET" action="/static/html/layout.html">
<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>
<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>