2015-08-28 93 views
2

我有一個使用角度html5模式進行路由的問題,使用彈簧引導後端。當我使用ui路由器的$ state.go()導航到不同的url時,應用程序工作正常,但是當我嘗試輸入不同的狀態的url並直接轉到它時,它無法正確加載。Angular html5模式和彈簧路由

我們使用了類似於此處詳述的解決方案(https://spring.io/guides/tutorials/spring-security-and-angular-js/),本質上使用彈簧控制器將某些頁面轉發到基本URL「/」。與我們的不同之處在於,我們使用基本網址「步驟」將每個頁面放在首頁之前。但是,當我們直接導航到我們網站中的其他頁面時,所加載的每個資源都會變成我們的index.html文件(js,css等)。當我們查看網絡請求時,出於某種原因,它會在每個請求前附加「step」url(因此,而不是css/style.css,它將是step/css/style.css)。

這是我們的春天控制器的例子:

@Controller 
public class ViewController { 
    @RequestMapping(value="/step/**") 
    public String forward() { 
     return "forward:/"; 
    } 
} 

任何幫助,將不勝感激,但請記住,我們已經調查了各種解決方案已經如提到的鏈接和一些其他具有類似的解決方案。

回答

0

,請返回要映射它而不是向前:

@Controller 
public class MainViewController { 

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

    @RequestMapping("/application/**") 
    public String apppplicationContext() { 
     return "index"; 
    } 
} 
+0

你能詳細說明一下嗎?我嘗試過使用「/ ** /」,但是我最終在一個無限循環中返回「index」,然後再次使用「/WEB-INF/views/index.html」調用控制器,有沒有什麼方法可以讓我有一個帶「/ **」的控制器,排除任何以「/ WEB-INF」開頭的東西?我是否必須將所有內容都粘貼到「/ application」中? – Craig

0

遲到的回答,反正我絆倒了同樣的問題,在完全相同的情況下,你,與具有錯誤的資源文件網址重裝上在春節控制器映射到某一前綴的網址的頁面時:

@RequestMapping(value = "/hello/{id:[\\w-]+}") 
public String forwardHello() { 
    return "forward:/index.html"; 
} 

我的問題是,在index.html文件我有:

<head>  
<link rel='stylesheet' href='webjars/font-awesome/4.5.0/css/font-awesome.min.css'> 
<link rel='stylesheet' href='webjars/bootstrap/3.3.4/css/bootstrap.min.css'> 
... 
<base href="/my-app/" /> 
</head> 

一切只要工作得很好,因爲我是航行一次索引頁面加載,但是從hello上下文刷新頁面時,如:

http://example.com/my-app/hello/john 

瀏覽器嘗試加載一個額外的資源文件hello在路徑中,例如

http://example.com/my-app/hello/webjars/... 

解決的辦法是把<base href="/my-app/" />第一在報頭中,以確保所有鏈接的資源被從該基加載。

引用W3Schools

提示:把< base>標記作爲元素中的第一元件,從而在頭部分的其他元件使用來自該元素的信息。

1

結合線程和this source我們終於得到它的工作。在我們的情況下,沒有任何子頁面。也許這可以幫助別人:

@RequestMapping(value = "/**/{id:[^\\.]*}") 
public String html5Forwarding() { 
    return "forward:/index.html"; 
} 

在一開始/**/有助於嵌套的資源映射到這個方法。