var timeoutPromise;
showTooltipFn = function() {
timeoutPromise = $timeout(function() {
tt.tooltip("show");
}, commonOptions.delay.show);
tt.on("mouseleave", function() {
$timeout.cancel(timeoutPromise);
});
};
}
上述表单的控制器
<form th:action="@{/hi}" th:object="${datum}" method="post">
<p>date : <input type="date" th:field="*{date}"/> </p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
简单的pojo类
@PostMapping("/hi")
fun testum(@ModelAttribute datum: Datum) {
println(datum)
}
我正在尝试以表格形式发送日期,但获得此例外:
class Datum(
@DateTimeFormat(pattern = "yyyy-MM-dd")
var date: LocalDate? = null
)
但是如果我将类型从LocalDate更改为String,它可以正常工作。我想将表格中的日期映射到Datum类的日期属性。任何人都可以帮助我吗?任何链接?感谢。
这个链接对我没有帮助similar problem
答案 0 :(得分:1)
我刚用控制器创建了你的例子:
@Controller
public class StackOverflow {
@GetMapping("/stack")
public String template(Model m) {
m.addAttribute("datum", new Datanum());
return "stackoverflow.html";
}
@PostMapping("/stack2")
public String testum(@ModelAttribute Datanum user) {
System.out.println(user.getDate());
return null;
}
}
这是视图:
<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form th:action="@{/stack2}" th:object="${datum}" method="post">
<p>date : <input type="date" th:field="*{date}"/> </p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
</body>
</html>
这就是Bean
import java.time.LocalDate;
import org.springframework.format.annotation.DateTimeFormat;
public class Datanum{
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate date;
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
}
它起作用了:
我看到的不同之处在于您在Bean上使用var
var date: LocalDate? = null
我认为这是Java 10,不是吗?为什么不尝试使用
像我一样做豆子,也许这可以帮助你。而不是var使用LocalDate
希望这有效
答案 1 :(得分:0)
这是一个古老的问题,但我只留给未来的读者一个答案。
这不是百里香的问题,更不是@DateTimeFormat
绑定的问题。
如果像这样更改Datum
类,上述问题中的示例将起作用:
class Datum {
@DateTimeFormat(pattern = "yyyy-MM-dd")
var date: LocalDate? = null
}
请注意,date
字段已从在主要构造函数中的声明移至类主体中。
(请注意,从Datum (...)
更改为Datum {...}
)
class Datum (
@field:DateTimeFormat(pattern = "yyyy-MM-dd") var date: LocalDate? = null
)
如果由于将其作为data class
或其他原因而需要在构造函数中声明它,则必须使用use-site targets进行注释。
但是,请注意解决方案2可能并不总是有效。我无法在一个示例项目中进行复制-但是在一个实际项目中,存在一个问题,其中@field:DateTimeFormat
不能正确地将请求参数字符串绑定到Date
对象。它有时行之有效,有时却行不通,因此调试起来非常棘手。
当它不起作用时,它会发出诸如Validation failed for object='Datum'. Error count: 1
之类的错误,而恢复到解决方案1总是可以。每次我们再次编译时,解决方案2有时都会工作,并且会随机中断,而无需进行任何代码更改。
我们已采取严格将@DateTimeFormat
带注释的字段放入类主体声明的方式,以确保其有效。