Spring MVC Static Resources частично работает - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть базовое приложение для работы с каталогами, которое отлично работает, за исключением того, что кажется, что только иногда можно найти статические ресурсы, которые я сконфигурировал, используя тег mvc: resources. Мой поиск на плате обнаружил проблемы, связанные с отображениями обработчиков, но моя проблема, похоже, другая.

В частности, когда PersonController вызывается с помощью метода, сопоставленного с «/ person», он возвращает personlist.jsp, используя средство распознавания представлений, и правильно находит и использует статические файлы css и js. Нет проблем.

Когда тот же контроллер вызывается с помощью другого метода, сопоставленного с «/ person / {familyid}» (сужает список лиц до определенной семьи), он возвращает тот же personlist.jsp… но теперь он не может найти или использовать Файлы CSS и JS (хотя он отображает правильные данные).

Я не понимаю, почему существует различие в поведении, поскольку оба сценария используют один и тот же Контроллер, одну и ту же возвращаемую строку (возвращают «список людей») и разрешают к одному и тому же JSP (т. Е. С одинаковыми ссылками раздела заголовка для css, js).

Я посмотрел на то, что возвращалось в браузере для каждого случая, используя «просмотр источника», и обе страницы возвращали один и тот же заголовок тега head для ссылок css и js:

<link href="resources/css/directory.css" rel="stylesheet" type="text/css"></link>
<script type="text/javascript" src="resources/scripts/jquery-1.7.min.js"></script>
<script type="text/javascript" src="resources/scripts/directory.js"></script>

Я думал, что проблема может быть связана с моим отображением тега, поэтому я также попробовал это:

 <resources mapping="**/resources/**" and
 resources mapping="resources/**" 

но без помощи.

Правильно ли я здесь подхожу к использованию статических ресурсов (и каково правильное сопоставление тегов ресурсов, если в этом проблема)? Спасибо.

Я использую Spring 3.0.6, и мои файлы css и js находятся соответственно в / WebContent / resources / css и / WebContent / resources / scripts, которые отображаются с помощью тега mvc: resource (см. Ниже).

PersonController:

@Controller
public class PersonController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    /**
     * Simply selects the home view to render by returning its name.
     */

    List<Person> personList;
    Boolean familyCalled = false;

    @Autowired
    PersonService personService;

    @RequestMapping(value="/people", method=RequestMethod.GET)
    public String people(Model model) {

        logger.debug("Received request to show peoplelist page");

        System.out.println("Running inside people() method of PersonController");
        personList = personService.getPersons();
        familyCalled = false;
        model.addAttribute("personList", personList);
        return "personlist";
        }

    @RequestMapping(value="/people/{familyId}", method=RequestMethod.GET)
    public String familyMembers(@PathVariable("familyId") String fid, Model model) {
        System.out.println("Running inside familyMembers() method of PersonController");
        personList = personService.getPersonsInFamily(fid);
        familyCalled = true;
        model.addAttribute("personList", personList);
        return "personlist";
        }

Servlet-Context.xml (без пространств имен):

<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

    <!-- for transactions -->
    <tx:annotation-driven/>

    <!-- Needed for @PreAuthorize security on methods -->
    <aop:aspectj-autoproxy/>

    <context:annotation-config />

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="resources/" />

        <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven/>

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <context:component-scan base-package="com.c3works.preps" />

</beans:beans>

personlist.jsp (Главный раздел):

<head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</meta>
        <title>XXXXXXXXXXXXXXXXXXX</title>

        <link href="resources/css/directory.css" rel="stylesheet" type="text/css">
</link>

        <script type="text/javascript" src="resources/scripts/jquery-1.7.min.js">
</script>

        <script type="text/javascript" src="resources/scripts/directory.js">
</script>

    </head>

1 Ответ

1 голос
/ 08 ноября 2011

Ваши URL являются относительными, и поэтому браузер ищет ресурсы не в том месте.(Проверьте полученный HTML-код)

Одним из решений является использование тега <spring:url> для создания URL-адресов ресурсов.1010 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...