【问题标题】:Send date parameter from html form to controller in thymeleaf将日期参数从 html 表单发送到 thymeleaf 中的控制器
【发布时间】:2015-07-02 18:26:26
【问题描述】:

我在将日期传递给控制器​​时遇到以下问题,如果我删除日期,那么它可以正常工作。

我的html代码是

<div class="form-group" id="all">
    <label class="col-lg-2 control-label" for="focusedInput3">Start date</label>
    <div class="col-lg-10">
        <input type="date" id="startDate" name="startDate" th:value="*{startDate}" />
    </div>
</div>
<div class="form-group" id="all">
    <label class="col-lg-2 control-label" for="focusedInput4">End date</label>
    <div class="col-lg-10">
        <input type="date" id="endDate" name="endDate" th:value="*{endDate}" />
    </div>
</div>

我的实体类是

@Column(name = "name")
private String courseName;

@Column(name = "semister")
private String semister;

@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat (pattern="dd-MMM-YYYY")
@Column(name = "startDate")
private Date startDate;

@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat (pattern="dd-MMM-YYYY")
@Column(name = "endDate")
private Date endDate;

点击提交按钮后,出现如下错误:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing  this as a fallback.

Fri Apr 24 14:05:33 IST 2015
There was an unexpected error (type=Not Found, status=404).
No message available

这是我的控制器

@Controller
@RequestMapping("/admin")
public class CourseScheduleController {

@Autowired
private CourseScheduleService courseScheduleService; 

@RequestMapping("/createCourse")
public ModelAndView getAllativities() {
    Map<String, Object> model = new HashMap<String, Object>();
    model.put("courseName", "");
    model.put("semister", "");
    model.put("startDate",null);
    model.put("endDate",null);
    return new ModelAndView("createCourse",model);
}

@RequestMapping("/saveCourse")
public String saveCourseSchedule(@ModelAttribute CourseBE courseBE){
    courseScheduleService.saveCourseSchedule(courseBE);
    return "redirect:/admin/createCourse";
}

请帮我解决这个问题。

【问题讨论】:

  • @Temporal(TemporalType.TIMESTAMP) @DateTimeFormat (pattern="dd-MMM-YYYY")替换为@Temporal(TemporalType.DATE)
  • 能否请您发送您的控制器类(映射方法)?
  • @s.kwiotek,发布控制器类@Abel Roussi。已更改但导致相同的错误
  • 你为什么使用*{ ... }操作符而不是${ ... }?..显示整个html文件(提交按钮在哪里?)和thymeleaf模板的名称(是@ 987654330@)..

标签: java spring spring-mvc thymeleaf


【解决方案1】:

添加以下内容:

logging.level.org.springframework.web=DEBUG

到属性文件。它将有助于详细记录有关 HTTP 错误的信息。

【讨论】:

    【解决方案2】:

    在您的控制器中添加一个活页夹将允许从您的表单绑定到您的模型。

     @InitBinder
     public void initDateBinder(final WebDataBinder binder) {
            binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-mm-dd"), true));
     }
    

    应该把你的输入字符串从你的表单中转换为日期。

    如果您使用input type="date",我认为您将别无选择pattern date。 如果您希望模式具有更大的灵活性,只需将输入类型更改为文本类型,然后将格式的模式调整为您喜欢的任何内容。

    你应该在你的 html 标记中使用 th:field 来实现类似的绑定:

    <input th:field="*{startDate}"
    

    并确保您的表单具有 &lt;form th:object="${courseBE}" 之类的内容来定义用于绑定表单的 bean。

    【讨论】:

      【解决方案3】:

      也许你应该在控制器上包含一个活页夹:

      @InitBinder
          public void initBinder(WebDataBinder dataBinder) {
              dataBinder.setDisallowedFields("id");
      
              dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
                  @Override
                  public void setAsText(String value) {
                      try {
                          setValue(new SimpleDateFormat("dd/MM/yyyy").parse(value));
                      } catch (ParseException e) {
                          setValue(null);
                      }
                  }
              });
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-14
        • 2019-09-29
        • 2018-10-11
        • 2020-08-23
        • 2019-03-18
        • 1970-01-01
        • 2015-09-04
        • 1970-01-01
        相关资源
        最近更新 更多