我正试图从百万富翁input
获取一个值到我的java类中。
来自百里香的简单脚本:
<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创建的。我究竟做错了什么?我对其他选项持开放态度,我正在努力理解并学习如何解决这个问题。
答案 0 :(得分:2)
直接使用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
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";
}
}
请注意,在上面的控制器中,我们不需要扩展任何其他类。只是注释,你就可以了。
如果您希望在Java代码中打印名为myParam
的URL参数的值,那么您可以使用@RequestParam
轻松地在控制器中执行此操作。它甚至可以将其转换为Integer
类型的内容,而无需您做任何额外的工作:
@PostMapping("/foo")
public String showPage(@ModelAttribute("someBean") SomeBean bean, @RequestParam("myParam") Integer myIntegerParam) {
System.out.println("My param: " + myIntegerParam);
return "redirect:someOtherPage";
}
我还没有包含适当处理日期的步骤,因为这超出了这个问题的范围,但如果您遇到问题,可以考虑向控制器添加类似的内容:
@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
}
答案 1 :(得分:0)