我正在尝试从 thymeleaf input
获取一个值到我的 java 类中。
来自 thymeleaf 的简单脚本:
<input type="text" id="datePlanted" name="datePlanted" th:value="*{datePlanted}"/>
我如何才能将 datPlanted
检索到我的 java 类中?
尝试了以下 servlet 教程:
@WebServlet("/")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// read form fields
String username = request.getParameter("datePlanted");
System.out.println("date: " + datePlanted);
// do some processing here...
// get response writer
PrintWriter writer = response.getWriter();
// return response
writer.println(htmlRespone);
}
}
我尝试遵循教程,但我不确定我应该/不应该使用 servlet。我的应用程序是使用 Spring Boot、Java 和 Thymeleaf 创建的。我究竟做错了什么?我对其他选择持开放态度,我正在尝试理解并学习如何解决这个问题。
最佳答案
直接使用 servlet 本身并没有什么问题,但是 Spring MVC 和 Boot 都提供了许多工具来让您的生活更轻松,让您的代码更简洁。我将为您提供一些需要深入研究的领域,但请查看 GitHub 上的更多示例以供进一步阅读。当您查看文档时,请仔细查看 @ModelAttribute
, th:object
和@RequestParam
。
让你拥有 foo.html:
<form th:action="@{/foo}" th:object="${someBean}" method="post">
<input type="text" id="datePlanted" name="datePlanted" />
<button type="submit">Add</button>
</form>
该表单使用 Thymeleaf 的 th:object
表示法,我们可以使用 Spring 的 ModelAttribute
方法参数来引用它。
那么你的 Controller 可以:
@Controller
public class MyController {
@GetMapping("/foo")
public String showPage(Model model) {
model.addAttribute("someBean", new SomeBean()); //assume SomeBean has a property called datePlanted
return "foo";
}
@PostMapping("/foo")
public String showPage(@ModelAttribute("someBean") SomeBean bean) {
System.out.println("Date planted: " + bean.getDatePlanted()); //in reality, you'd use a logger instead :)
return "redirect:someOtherPage";
}
}
请注意,在上面的 Controller 中,我们不需要扩展任何其他类。只需添加注释即可。
如果您希望在 Java 代码中打印名为 myParam
的 URL 参数的值,Spring 可以让您在 Controller 中使用 @RequestParam
轻松完成此操作。它甚至可以将其转换为 Integer
类型,而无需您进行任何额外的工作:
@PostMapping("/foo")
public String showPage(@ModelAttribute("someBean") SomeBean bean, @RequestParam("myParam") Integer myIntegerParam) {
System.out.println("My param: " + myIntegerParam);
return "redirect:someOtherPage";
}
我也没有包括适当处理日期的步骤,因为这超出了这个问题的范围,但如果遇到问题,您可以考虑向 Controller 添加类似的内容:
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
binder.registerCustomEditor(Date.class, new CustomDateEditor(
dateFormat, true));
}
编辑:SomeBean
是一个 POJO:
public class SomeBean {
private LocalDate datePlanted;
//include getter and setter
}
关于java - 如何从 spring boot thymeleaf 获取输入值到java类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899494/