将AngularJS与JSP页面集成

时间:2015-05-29 10:15:17

标签: java javascript angularjs jsp rest

目前我们正在将我们的应用程序从JSP迁移到AngularJS。该组织决定一次只做一个模块。我们遇到的挑战之一是将用户数据从JSP传递到AngularJS(例如index.html)。

我们希望如果调用AngularJS模块,系统将重新路由到由AngularJS管理的index.html。

我的问题是我们可以采取哪些方法将用户数据(例如用户名)从JSP传输到index.html。

可能的情况:

  1. 用户登录系统
  2. 用户转到Angular管理模块。
  3. 系统会将用户重定向到index.html(AngularJS)
  4. index.html将拥有用户凭据(例如用户名和密码)
  5. AngularJS将在index.html中管理用户的操作,并使用用户的凭据向RESTful服务请求。
  6. TIA

1 个答案:

答案 0 :(得分:0)

理想情况下,我不建议将usernamepassword注入index.html以供angularjs控制器/服务使用。如果用户在加载角度托管页面时已经过身份验证,则可以注入授权令牌或设置将由浏览器自动发送的cookie(假设jsp app和angular app在同一个域中)

现在谈论为angularjs注入数据,我可以想到两种方法(我推荐第二种方法,因为它没有污染全局范围)

  1. 将其注释为全局,并通过$window进行访问。例如。让你的服务器端.jsp呈现一个带有全局var的脚本标签,如

    <script type="type/javascript">
       var pass = 'whatevervalue';
    </script>
    
  2. 并使用$window

    在您的控制器中访问它
        angular.module('yourapp').controller('YourCtrl', $window){
            console.log($window.pass);
        }
    
    1. 您可以使用angular-preloaded将变量注入type="text/preloaded"的脚本代码中,并通过$preloaded服务将其提供给您的控制器。
    2. 让你的jsp输出如下所示

      <script type="text/preloaded">
      {
        "data": "point"
      }
      </script>
      

      并在你的控制器中获取,如下所示

      angular.module('app', ['gs.preloaded'])
      .controller('SomeCtrl', function ($preloaded) {
          // do something with $preloaded.
          $preloaded; // => { data: "point", another: { point: "of data" } }
      });
      

      请记住在您的控制器脚本之前放置预加载的脚本以使其正常工作。来自docs

        

      注意:您的脚本标记必须在使用$ preloaded之前运行,因此我建议将它们放在您的文档中。