2015-08-28 3 views
2

У меня возникла проблема с использованием углового режима html5 для маршрутизации с использованием пружинного ботинка. Приложение отлично работает, когда я использую $ state.go() ui router для перехода к разным URL-адресам, но когда я пытаюсь ввести url другого состояния и перейти непосредственно к нему, он не может правильно загрузиться.Угловой режим html5 и маршрутизация весов

Мы использовали решение, аналогичное тому, что подробно описано здесь (https://spring.io/guides/tutorials/spring-security-and-angular-js/), по существу используя контроллер пружины для пересылки определенных страниц на базовый url "/". Разница с нашей заключается в том, что мы используем базовый url, «step», чтобы помещать перед каждой страницей, кроме домашней страницы. Однако, когда мы переходим непосредственно к другой странице на нашем сайте, каждый загружаемый ресурс превращается в наш файл index.html (js, css и т. Д.). Когда мы смотрим на сетевые запросы, по какой-то причине он добавляет URL-адрес «step» перед каждым запросом (поэтому вместо 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

Можете ли вы подробно остановиться на этом? Я пробовал использовать «/ ** /, но в конечном итоге в бесконечном цикле, где я возвращаю« индекс », тогда контроллер снова вызывается с« /WEB-INF/views/index.html », который просто продолжает получать и т. д. Есть ли способ, которым я могу иметь контроллер с «/ **», который исключает все, что начинается с «/ WEB-INF»? Должен ли я придерживаться всего в «/ приложении»? – Craig

0

Поздний ответ, во всяком случае я натыкаюсь по этому же вопросу, в точно таком же контексте, как и вы, с файлами ресурсов, имеющих неправильное URL при перезагрузке страницы на URL отображается в какой-то префикс в контроллере Spring:

@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:

Совет: Поместите тег < базовый> в качестве первого элемента внутри элемента, так что другие элементы в головной части использует информацию из элемента.

1

В сочетании с резьбой и this source мы, наконец, получили его работу. В нашем случае нет никаких подстраниц. Может быть, это поможет кому-то:

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

/**/ в начале помогает отобразить вложенные ресурсы для этого метода.

Смежные вопросы