Я пытаюсь передать набор данных в html-форме;
<form class="form-inline" id="createjobform" method="POST" th:action="@{/createJob}">
...
<div class="form-group">
<input type="text" class="form-control" id="nopth"
placeholder="Number Of People To Hire" name="nopth" />
</div>
<div class="form-group">
<input type="text" readonly="readonly" class="form-control"
id="listid" placeholder="ID" name="listid"
title="ID of the list which associated"
th:value="${findOneList.id}"/>
</div>
listid здесь, из другой таблицы (manytoone-onetomany), и я хочу добавить новую запись с этим listid.Когда я делаю это на phpmyadmin, это работает.Но я хочу сделать это с AJAX или без AJAX, на самом деле.Я пробовал оба пути, но он показывает ту же ошибку.
Вот мой контроллер;
@RequestMapping(value = "/createJob", method = RequestMethod.POST)
public @ResponseBody void createJob(@RequestBody Jobs jobs,
@RequestParam(value = "title", required = false) String title,
@RequestParam(value = "description", required = false) String description,
@RequestParam(value = "nopth", required = false) Integer nopth,
@RequestParam(value = "lastDate", required = false) Date lastDate,
@RequestParam(value = "listid", required = false) Long listid,
HttpServletResponse hsr) throws IOException {
// if I do String nopth above and then
//jobs.setNopth(Integer.valueOf(nopth));
// error is NumberFormatException (cannot cast string to int)
jobs.setLastDate(lastDate);
jobs.setTitle(title);
jobs.setDescription(description);
jobs.setNopth(nopth);
Lists listttt = listsService.findOne(listid);
jobs.setLists(listttt);
jobsService.save(jobs);
mavHomepage.addObject("findOneList", listsService.findOne(jobs.getId()));
mavHomepage.addObject("mod", "VIEW_ONELIST");
hsr.sendRedirect("/oneList?id=" + listid);
}
, поэтому ошибка;
error: "Internal Server Error"
exception: "java.lang.NullPointerException"
message: "No message available"
path: "/createJob"
status: 500
в строке jobs.setNopth (nopth);
также ошибка;
error: "Internal Server Error"
exception: "org.springframework.dao.InvalidDataAccessApiUsageException"
message: "The given id must not be null!; nested exception is
java.lang.IllegalArgumentException: The given id must not be null!"
path: "/createJob"
status: 500
в строке Lists listttt = listsService.findOne (listid);
Это не для ajax / post.Когда я делаю;
public @ResponseBody void createJob(@RequestBody Jobs jobs,
@RequestParam(value="listid, required="false") listid,
HttpServletResponse hsr){
Lists listttt = listsService.findOne(listid);
jobs.setLists(listttt);
...
}
и ajax;
var formData = {
title : $("#title").val(),
description : $("#description").val(),
nopth : $("#nopth").val(),
lastDate : $("#lastDate").val(),
listid : $("#listid").val(),
}
...
$.ajax({
type : "POST",
contentType : "application/json",
url : "/createJob",
data : JSON.stringify(formData),
....
та же ошибка (указанный идентификатор не должен быть нулевым!)
ТАК, КАК ДОЛЖЕН ЯПРОЙДИТЕ ДАННЫЕ ИЗ ФОРМЫ, ЧТО ТАКОЕ ЦЕЛОЕ / ДЛИННЫЕ ЦЕННОСТИ?С AJAX БЫ ЛУЧШЕ.И этот список - ИНОСТРАННЫЙ КЛЮЧ.
Классы моделей;
@Entity(name = "jobs")
public class Jobs {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "Title")
private String title;
@Column(name = "Description")
private String description;
@Column(name = "Number_Of_People_To_Hire")
private Integer nopth;
@Column(name = "Last_Application_Date")
private Date lastDate;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="listid")
private Lists lists;
...
@Entity(name = "lists")
public class Lists implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@Column(name = "List_Name")
public String listname;
@OneToMany(mappedBy = "lists", cascade = CascadeType.ALL)
private List<Jobs> jobs;
Я пытался изменить тип nopth наСтрока, целое число и т. Д. И тип ввода = "текст или число" без изменений.