Java 刷新后的白色标签错误页
我有Spring启动应用程序(后端),前端我使用Angular 2单页应用程序 每当我导航到一个路由(例如:localhost:8080/getAccounts)并在导航后刷新时,我都会看到白标签错误页面。如果我是根localhost:8080,我就可以正常工作。问题只发生在子链接中 返回(使用返回/返回按钮)到上一页也可以正常工作。只是刷新一下 我也不能直接调用链接:localhost:8080/getAccounts。首先,我必须回到主页(localhost:8080),通过子导航栏调用页面 有人有同样的问题吗?我必须改变的理由。我的代码: 梅因酒店Java 刷新后的白色标签错误页,java,angular,spring-boot,angular2-routing,Java,Angular,Spring Boot,Angular2 Routing,我有Spring启动应用程序(后端),前端我使用Angular 2单页应用程序 每当我导航到一个路由(例如:localhost:8080/getAccounts)并在导航后刷新时,我都会看到白标签错误页面。如果我是根localhost:8080,我就可以正常工作。问题只发生在子链接中 返回(使用返回/返回按钮)到上一页也可以正常工作。只是刷新一下 我也不能直接调用链接:localhost:8080/getAccounts。首先,我必须回到主页(localhost:8080),通过子导航栏调用页面
import {bootstrap} from '@angular/platform-browser-dynamic';
import {AppComponent} from './components/app.component';
import {HTTP_PROVIDERS};
import {enableProdMode} from '@angular/core';
enableProdMode();
bootstrap(AppComponent, [HTTP_PROVIDERS]);
app.com组件:
import { Component, OnInit } from '@angular/core';
import { Http } from '@angular/http';
import { RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from '@angular/router-deprecated';
import { HomeComponent } from './home.component';
import { UserSearchComponent} from './webUserProfiles.component';
import { UserDetailViewComponent} from './webUserProfileView.component';
import { HTTPService } from '../service/http.service';
@Component({
selector: 'app-content',
templateUrl: './app/templates/app.component.html',
directives: [ROUTER_DIRECTIVES, AccessErrorComponent],
providers: [
ROUTER_PROVIDERS,
HTTPService
]
})
@RouteConfig([
{
path: '/',
name: 'HomeComponent,
useAsDefault: true
},
{
path: '/user',
name: 'UserSearch',
component: UserSearchComponent,
},
{
path: '/user/:id',
name: 'UserDetailView',
component: UserDetailViewComponent,
}
])
export class AppComponent implements OnInit {
constructor (
) { }
}
}
提前感谢经过一些研究,我从 使用默认的路由策略(HTML5历史API),您需要一个服务器配置来将所有路径重定向到HTML入口点文件。使用hashbang方法,没有必要。。。如果要切换到这种方法,只需使用以下代码: 您可以看看有关此问题的以下问题:
每当我刷新时,我的Angular SPA上都会出现类似的问题白色标签错误消息 如果您不想更改应用程序URL(如果使用HashLocation策略,将会发生这种情况),您可以添加一个新的控制器来处理Spring Boot应用程序中的白标签错误映射 修复方法是创建一个实现ErrorController的控制器,并返回一个转发到/
@CrossOrigin
@RestController
public class IndexController implements ErrorController {
private static final String PATH = "/error";
@RequestMapping(value = PATH)
public ModelAndView saveLeadQuery() {
return new ModelAndView("forward:/");
}
@Override
public String getErrorPath() {
return PATH;
}
}
如果不想使用HashLocationStrategy,可以在项目中添加以下控制器:
@控制器
公开课{
@GetMapping(“/”)
公共字符串欢迎(){
返回“index.html”;
}
//匹配没有后缀的所有内容(因此不是静态资源)
@GetMapping(值={
“/{path:[^.]*}”,
“/{path:[^.]*}/{path:[^.]*}”,
“/{path:[^.]*}/{path:[^.]*}/{path:[^.]*},
“/{path:[^.]*}/{path:[^.]*}/{path:[^.]*}/{path:[^.]*}/{path:[^.]*}”,
“/{path:[^.]*}/{path:[^.]*}/{path:[^.]*}/{path:[^.]*}/{path:[^.]*}/{path:[^.]*}”
//如果需要,请添加更多。。。
})
公共字符串重定向(){
//转发到主页,以便保留路由。
返回“forward:/”;
}
}
首先感谢您的回答。路由(Router_providers)在我的应用程序的app.component中,而不是main.ts中。在main.ts中,我只有引导(MyApp,[HTTP_PROVIDERS]);而且没有路由器供应商。这有什么区别吗?这只是对任何考虑实施这一策略的人的一个提醒:angular文档特别警告,如果您打算使用任何服务器端渲染来加快加载时间,就不要使用哈希路由策略。散列路由会阻止它工作。很好的快捷方式,比在tomcat上设置重写规则更容易
@CrossOrigin
@RestController
public class IndexController implements ErrorController {
private static final String PATH = "/error";
@RequestMapping(value = PATH)
public ModelAndView saveLeadQuery() {
return new ModelAndView("forward:/");
}
@Override
public String getErrorPath() {
return PATH;
}
}