Ошибка Java, Spring, Apache Tiles: не удалось разрешить представление с именем 'contact' в сервлете с именем 'spring' - PullRequest
2 голосов
/ 10 августа 2011

контроллер:

@Controller
@SessionAttributes
public class ContactController {

    @RequestMapping(value = "/addContact", method = RequestMethod.POST) 
    public String addContact(@ModelAttribute("contact") 
                            Contact contact, BindingResult result) {

         System.out.println("First Name:" + contact.getFirstName() +
                 "Last Name:" + contact.getLastName());

     return "redirect:contacts.html";
    }

    @RequestMapping("/contact")
    public ModelAndView showContacts() {

        return new ModelAndView("contact", "command", new Contact());
    }
}

это мой файл tile.xml:

<tiles-definitions>
    <definition name="base.definition"
        template="/WEB-INF/jsp/layout.jsp">
        <put-attribute name="title" value="" />
        <put-attribute name="header" value="/WEB-INF/jsp/header.jsp" />
        <put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp" />
        <put-attribute name="body" value="" />
        <put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp" />
    </definition>

    <definition name="contact" extends="base.definition">
        <put-attribute name="title" value="Contact Manager" />
        <put-attribute name="body" value="/WEB-INF/jsp/contact.jsp" />
    </definition>

ошибка заключается в следующем:

org.apache.jasper.JasperException: javax.servlet.ServletException: Could not resolve view with name 'contact' in servlet with name 'spring'
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

не стесняйтесь просить больше исходного кода

1 Ответ

5 голосов
/ 10 августа 2011

В своем последнем вопросе вы показали, что использовали UrlBasedView Resolver с префиксом и суффиксом.

Удалите этот префикс и суффикс.

Это должно быть достаточно:

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"
    id="tilesViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>
<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"
    id="tilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/layouts/layouts.xml</value>
            <!-- Scan views directory for Tiles configurations -->
            <value>/WEB-INF/views/**/views.xml</value>
        </list>
    </property>
</bean>

btw: эта конфигурация допускает два tzps (только там, где есть отличия в грамматике) файлов конфигурации плиток

  • /WEB-INF/layouts/layouts.xml содержит все (давайте назовем это) "базовые определения"
  • /WEB-INF/views/**/views.xml содержит конкретные определения, расширяющие «базовые определения» (например, определение «контакт»). Вы можете иметь отдельные view.xml для каждой папки. сгруппируйте ваши представления, например, все представления (создание, обновление, показ и список) для каждого объекта, в отдельной папке

Если вам не нужна эта функция, просто удалите эту строку.

...