【问题标题】:Spring Form: The Request sent by the client was syntactally incorrectSpring Form:客户端发送的请求语法不正确
【发布时间】:2015-10-31 17:46:43
【问题描述】:

我有以下jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

      <form:form action="save_event" modelAttribute="eventForm" method="post">

      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title">Create Event</h4>
      </div>

      <div class="modal-body">

        <div class="row">
            <div class="col-xs-12 form-group">
                <label for="eventNameInput">Name:</label>
                <form:input id="eventNameInput" class="form-control" type="text" path="eventName" />
            </div>
        </div>
        <div class="row">
            <div class="col-xs-12 form-group">
                <label for="eventStartInput">Start:</label>
                <div class='input-group date' id='datetimepicker1'>
                    <form:input id="eventStartInput" class="form-control" type="text" path="startDate" />
                    <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
                    </span>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-xs-12 form-group">
                <label for="eventEndInput">End:</label>
                <div class='input-group date' id='datetimepicker2'>
                    <form:input id="eventEndInput" class="form-control" type="text" path="endDate" />
                    <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
                    </span>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-xs-12 form-group">
                <label for="eventDescInput">Description:</label>
                <form:textarea id="eventDescInput" class="form-control" path="description"></form:textarea>
            </div>
        </div>

    </div>
    <div class="modal-footer">
        <input type="submit" value="Submit" class="btn btn-primary" />
        <input type="reset" class="btn btn-default" value="Reset" />
    </div>

    </form:form>

    <script type="text/javascript">
    $(function () {
        $('#datetimepicker1').datetimepicker({
            sideBySide: true,
            format: "DD.MM.YYYY HH:mm"
        });
        $('#datetimepicker2').datetimepicker({
            sideBySide: true,
            format: "DD.MM.YYYY HH:mm"
        });
    });
    </script>

还有以下控制器:

@Controller
public class EventCreateController {

    @RequestMapping(value="/create_event", method=RequestMethod.GET)
    public String createEvent(Model model) {
        model.addAttribute("eventForm", new EventForm());
        return "create_event";
    }

    @RequestMapping(value="/save_event", method=RequestMethod.POST)
    public String eventSubmit(@ModelAttribute("eventForm") EventForm form, Model model) {

        List<Event> eventList = new ArrayList<Event>();
        model.addAttribute("eventList", eventList);

        return "redirect:/welcome";
    }

}

但每当提交表单时,我都会收到错误消息: 客户端发送的请求语法错误。

我正在通过邮寄方式发送表格,并期待通过邮寄方式获得表格。我正在处理“/save_event”,我期待“/save_event”的结果。

一些想法?

编辑:这是 application-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.afterguard.sailplanner.controller" />

    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

还有 web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns="http://java.sun.com/xml/ns/javaee" 
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
            version="3.0">
  <display-name>SailPlanner</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>


  <servlet>
    <servlet-name>sailplanner</servlet-name>
    <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>sailplanner</servlet-name>
    <url-pattern>/welcome</url-pattern>
    <url-pattern>/users</url-pattern>
    <url-pattern>/create_event</url-pattern>
    <url-pattern>/save_event</url-pattern>
  </servlet-mapping>

</web-app>

【问题讨论】:

  • 请提供EventForm 类和发送到服务器的请求正文(Chrome:F12 - 网络选项卡)。

标签: java spring forms jsp


【解决方案1】:

操作不应该只是/save_event 而不是${context}/save_event.jsp吗?

  1. 在使用 form:form 时,应自动注意为上下文添加前缀,即 form taglib。
  2. 为什么是.jsp 后缀?

【讨论】:

  • 这不起作用。如果没有 jsp,他不知道在哪里可以找到资源。使用代码 {save_event.jsp} 而不是 {${context}/save_event.jsp} 我得到了同样的错误,和以前一样......
  • 但是,您发布的是控制器方法,而不是 JSP,对吧?
  • 尝试在控制器中添加调试点或日志行,以防它进入控制器方法,但无法找到视图。正如 Ankur 所说,您可能需要为 JSP 提供前缀和后缀。
  • 不,他甚至没有打电话给控制器。我认为使用 {@RequestMapping("/welcome")} 将 {welcome} 解析为控制器存在问题
  • 好的,现在一切都在没有 .jsp 的情况下工作,但我仍然收到更新问题的旧错误(一切都调整为现在)...
【解决方案2】:

RequestMapping 值应与表单的操作相同。使用表单标签代替 form:form 并且不要在表单操作或控制器中声明 .jsp 扩展名,只需在 applicationContext.xml 中定义一个 InternalResourceViewResolver

代码:

applicationContext.xml

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/pages/" />
    <property name="suffix" value=".jsp" />
</bean>

编辑:/pages/ 替换为您的查看页面位置。

jsp:

<form action="save_event" modelAttribute="eventForm" method="post">

  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <h4 class="modal-title">Create Event</h4>
  </div>
</form>

控制器:

@Controller
public class EventCreateController {

@RequestMapping(value="/save_event", method=RequestMethod.POST)
public String eventSubmit(@ModelAttribute("eventForm") EventForm form, Model model) {

    List<Event> eventList = new ArrayList<Event>();
    model.addAttribute("eventList", eventList);

    return "redirect:/welcome";
  }

}

我希望这对你有用。

【讨论】:

  • 我没有 applicationContext。我应该把它放在哪里以及如何配置它(以及在哪里)?但我有一个 application-servlet.xml
  • OP:你使用的是 Spring Boot 吗?
  • 你在哪里定义其他bean?如果它在 application-servlet.xml 中,则将指定的 bean 放在 application-servlet.xml 中。
  • 我根据 SPRING MVC 发布这个结果
  • 我问过Don,可能他用的是Spring Boot,所以他没有配置文件。
猜你喜欢
  • 1970-01-01
  • 2013-12-30
  • 2013-02-05
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多