【问题标题】:Not able to render the request to another html from controller using angularjs + spring MVC 3.0无法使用 angularjs + spring MVC 3.0 将请求从控制器呈现到另一个 html
【发布时间】:2013-04-01 11:20:59
【问题描述】:

Logon.jsp

    <!DOCTYPE html>
    <html ng-app="angularspring">
    <head>

    </head>

    <body ng-controller="LogonController">

    <form>
            <div>
                TextBox : <input type="text"  ng-model="person.userName" />
            </div>
            <div>
                Password : <input type="password" ng-model="person.passWord" />
            </div>
            <div ng-view></div>
            <button type="submit" ng-click="login(person)"> Submit 

            </button>
    </form>

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" src="js/jquery.i18n.properties-min-1.0.9.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js"></script>
    <script type="text/javascript" src="js/init.js"></script>
    <script type="text/javascript" src="js/controller.js"></script>
    <script type="text/javascript" src="js/i18n.js"></script>
    <script type="text/javascript" src="js/base64.js"></script>
    <script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>


    </body>


    </html>

controller.js

        var as = angular.module('angularspring',[]);


        as.controller('LogonController', function ($scope, $http) {
            var actionUrl = 'action/checkUserNameAndPassword/';


             $scope.login = function (person) {

                 $http.post(actionUrl,$scope.person);
             };


        });      

web.xml

    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/action-servlet.xml
            </param-value>
        </context-param>

        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

        <!-- Spring MVC -->
        <servlet>
            <servlet-name>action</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>action</servlet-name>
            <url-pattern>/action/*</url-pattern>
        </servlet-mapping>


        <welcome-file-list>
        <welcome-file>logon.html</welcome-file>
      </welcome-file-list>  

在action-servlet.xml 文件中包含以下标签和类

action-servlet.xml

    <mvc:annotation-driven/>    

    <context:annotation-config />

    <context:component-scan base-package="com.pack" />

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>


    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
      <property name="prefix" value="" />
      <property name="suffix" value=".html" />

    </bean>

LogonController.java

在 LogonController 中,我能够获取绑定到 person 对象的请求值,但我无法将请求呈现给 logonSuccess.html

    @RequestMapping(value = "/checkUserNameAndPassword", method = RequestMethod.POST)
    @ResponseBody 
    public ModelAndView logon(@RequestBody Person person) {

            return new ModelAndView("WEB-INF/views/logonSuccess");
        }

【问题讨论】:

    标签: jquery spring-mvc controller angularjs modelandview


    【解决方案1】:

    据我了解,您可以绑定模型属性但无法调度到所需的视图。

    这是我观察到的

    您的logon 方法上有@ResponseBody 注释,但它返回一个ModelandView 对象。

    如果您想返回到 html 视图,请删除 @ResponseBody 注释。

    你可以阅读更多关于这个here

    同样在action-servlet.xml 中指定viewResolverprefix 属性以及我认为是WEB-INF/views 的html 文件的位置

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.html</value>
        </property>
    </bean>
    

    现在你可以返回ModelandViewlike

     return new ModelAndView("logonSuccess");
    

    【讨论】:

    • 我试过了,你说我删除了 @ResponseBody 并修改了 action-servlet.xml 文件中的更改。但我也面临同样的问题。
    • 我在 Spring MVC 中使用 angularJs。没有显示错误。
    • 您要定向到 logonSucess.html 吗?这个 html 包含什么?您是否能够检查请求是否至少到达控制器?
    • 抱歉,后面的 reply.logonSuccess.html 文件只包含成功消息。是的,我可以看到请求到达控制器。但我无法重定向到 logonSuccess.html。
    【解决方案2】:

    我遇到了同样的问题。从登录页面,我试图在成功登录时重定向到主页。我正在使用 angular js 和 spring mvc 休息控制器。我正在从 angularjs 执行 http.post,而我的其余控制器正在执行身份验证并返回模型和视图对象。但是 angularjs 并没有将我重定向到主页。

    然后我改变了我的 angularjs 实现并且它起作用了。尝试从 angularjs 提交表单到控制器,而不是 http.post 或 http.get。现在页面被重定向到主页或错误页面,无论在 REST 控制器的 ModelAndView 对象中设置什么视图。

    【讨论】:

      猜你喜欢
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2014-03-13
      相关资源
      最近更新 更多