让我们说我有一个由Spring Framework呈现的页面。这是一个包含Angular 2代码的页面。如果Spring发送,我怎么能在页面上接收数据?我不想呈现页面,然后执行HTTP请求,然后获得响应。不,在Spring控制器中我想发送数据并以某种方式接收它与Angular 2并显示(没有额外的请求)。使用JSP很明显该怎么做,但是如何在呈现页面时从Spring发送的JSON设置Angular 2模型?
我现在拥有的是Spring Security管理登录。然后,在控制器数据中根据用户准备,然后我想将它发送到Angular 2页面。所以,我不知道如何渲染页面并附加数据,以便Angular 2同时渲染它。
答案 0 :(得分:1)
我不确定我是否完全明白这个问题......无论如何,如果我这样做,我就是这样做的 在spring控制器中,在呈现JSP页面之前,我需要创建JSON所需的所有业务逻辑;然后我创建一个JSON字符串,然后将其附加到模型中 这意味着我会做那样的事情:
@RequestMapping("/render")
public String renderView(ModelAndView model)
{
//Your JSON String
String json = "{\"foo\":\"bar\"}";
model.addAttribute("json", json);
return "yourJspName";
}
然后在JSP中,您可以使用Angular访问模型中包含的json(即pageContext中);例如,通过使用JSTL:
<script type="text/javascript">
var theJsonString = '${json}';
</script>
或
<script type="text/javascript">
var theJsonString = '<c:out value="${json}" />';
</script>
此时你有一个名为theJsonString的JS变量和你的JSON字符串,你可以根据需要使用它...例如将它传递给angular 如果你需要JSON对象,你应该这样:
<script type="text/javascript">
var theJsonString = '${json}';
var theJsonObj = JSON.parse(theJsonString);
</script>
或
<script type="text/javascript">
var theJsonString = '<c:out value="${json}" />';
var theJsonObj = JSON.parse(theJsonString);
</script>
我希望这可以提供帮助
安吉洛
答案 1 :(得分:0)
我能够通过重新设计应用而不是找到真正的解决方案来解决问题。我正在做的是启动Angular 2应用程序,在页面上有一些导航,功能,然后可以点击登录,Spring Security开始发挥作用。但是,在验证后我无法弄清楚如何再次启动Angular 2应用程序:启动一个全新的应用程序?或者以某种方式使用已经推出的继续开发?不确定。
我所做的只是通过始终显示登录页面启动应用程序,并且只有在用户登录后,Angular 2才会起作用。我想,如果我们在用户登录之前需要一些功能,我可以设置第二个网站来开发另一个Angular应用程序,并在那里建立一个可以启动这个的链接。问题是我试图将一个Angular应用程序分成我想是两个。
以防万一,这是我的security.xml部分(Spring Security版本4.0.4.RELEASE
):
<http use-expressions="true">
<intercept-url pattern="/views/**" access="hasAnyRole('ROLE_CUSTOMER', 'ROLE_ADMIN')" />
<form-login
login-page="/login.jsp"
login-processing-url="/views/home"
authentication-failure-url="/login.jsp?error=failed_login"
/>
<logout logout-url="/logout" logout-success-url="/login.jsp" delete-cookies="JSESSIONID" />
<remember-me />
<headers>
<cache-control/>
<xss-protection/>
</headers>
</http>
登录表单:
<form class="form-signin" method="POST"
action="${pageContext.servletContext.contextPath}/views/home">
<h2 class="form-signin-heading">Please sign in</h2>
<label for="inputEmail" class="sr-only">Email address</label>
<input type="text" name="username" class="form-control" placeholder="Login" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" name="password" class="form-control" placeholder="Password" required>
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> Remember me
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>
成功登录后启动Angular应用程序的控制器:
@RequestMapping("/views/home")
public String login() {
return "index";
}
然后,在启动的Angular 2应用程序中,我计划通过发出HTTP请求并使用Springs&#39;来获取数据。控制器返回我JSON
。因此,在Angular启动之后,它本身就可以通过HTTP与服务器进行交互。注销后,用户将无法访问Angular应用,因为它位于受保护的文件夹下且index.jsp
为not in the app root folder
,因此无法通过访问/
路径启动它。