【问题标题】:Spring - How to properly map Controller?Spring - 如何正确映射控制器?
【发布时间】:2015-08-12 12:25:39
【问题描述】:

我让控制器假设处理表单信息并将其发送到数据库(现在它只是打印)但是当我单击“提交”按钮时,进入浏览器的 URL 是错误的,因为这意味着控制器在我的 jsp 中显然不是的文件夹。如何解决这个问题?

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.method.support.ModelAndViewContainer;

import wymysl.database.Person;
import wymysl.database.PersonsRepository;


@RequestMapping("/register")
public class RegisterController {

PersonsRepository repo;

@RequestMapping(value = "/addPerson", method = RequestMethod.POST)
public String register(@ModelAttribute("Person") Person person, HttpServletRequest request ) {

    System.out.println(""+person.getName());

    return "index";

}

这是表单标题

<form class="form-register" method="POST" action="/register/addPerson" commandName="Person">

Web.xml

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>MyApp</display-name>

    <servlet>
        <servlet-name>app</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>app</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

【问题讨论】:

  • 对于初学者,将您的请求映射更改为 /register,而不仅仅是注册。为什么需要 HttpServletRequest?并将操作更改为 addPerson 或您正在做的任何事情。
  • 用于从表单中获取属性。现在更改了一些代码,但仍然无法正常工作。看看
  • 不,只是改变类内部注册方法顶部的请求映射,保持Controller注解为类。
  • 我可以回答您的问题,但我需要查看您的 web.xml(映射到调度程序的 url 模式)以及您的控制器是如何连接的。
  • 你在/下挂载了webapp吗?因为否则您的控制器将位于/APP_NAME/register/addPerson。对于这些情况,您应该使用 c:url 标签:&lt;c:url value="/register/addPerson"/&gt;

标签: java spring model-view-controller web-applications


【解决方案1】:

将表单中的 POST 操作更改为“action=/register”(删除 .html) 这可能有效或添加相同的请求映射

【讨论】:

    【解决方案2】:

    这里唯一映射的url是/register/addPerson,把action参数改成这个。

    【讨论】:

    • 在我的代码和帖子中更改了它,但仍然没有效果
    【解决方案3】:

    有几件事可能是错误的:

    1. 您确定您的控制器已在 Spring 中注册吗? (检查 RegisterController 的日志)
    2. 您应该使用 c:url 标签:&lt;c:url value="/register/addPerson"/&gt;
    3. 由于您将 DispatcherServlet 安装在 /,因此您需要包含一个 mvc:resources 标记才能找到其他资源:
    <!-- Handles GET requests for /resources/** by efficiently serving static content in the ${webappRoot}/resources dir --> 
    <mvc:resources mapping="/resources/**" location="/resources/" />
    

    【讨论】:

      猜你喜欢
      • 2016-09-17
      • 2015-06-19
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2020-01-16
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多