Есть два класса Category и Type. И две таблицы в MySQL с такими же названиями.
Код:
CREATE TABLE `type` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`sort` varchar(255) NOT NULL,
`categoryid` int(11) NOT NULL,
PRIMARY KEY (`ID`),
KEY `category_idx` (`categoryid`),
CONSTRAINT `category` FOREIGN KEY (`categoryid`) REFERENCES `category_production` (`categoryid`) ON DELETE NO ACTION ON UPDATE NO ACTION
)
CREATE TABLE `category_production` (
`categoryid` int(11) NOT NULL AUTO_INCREMENT,
`category` varchar(45) NOT NULL,
PRIMARY KEY (`categoryid`)
)
При создании записи в Type есть выпадающем списку с данными из Category. Когда нажимаю кнопку для подтверждения создания записи выдает ошибку(так же и с изменением):
HTTP Status 400 – Bad Request
Type Status Report
Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
Если везде убираю category, то программа работает исправно.
Type.java
Код:
@Entity
@Table(name = "type")
public class Type{
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "sort")
private String sort;
@OneToOne
@JoinColumn(name = "categoryid")
private Category category;
//геттеры и сеттеры
}
Category.java
Код:
@Entity
@Table(name = "category_production")
public class Category implements Serializable {
@Id
@Column(name = "categoryid")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int categoryid;
@Column(name = "category")
private String name_category;
//геттеры и сеттеры
}
TypeController.java
Код:
@Controller
public class TypeController {
private TypeService typeService;
@Autowired
@Qualifier(value = "typeService")
public void setTypeService(TypeService typeService) {
this.typeService = typeService;
}
private CategoryService categoryService;
@Autowired
@Qualifier(value = "categoryService")
public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
}
@RequestMapping(value = "types", method = RequestMethod.GET)
public String listType(Model model){
model.addAttribute("type", new Type());
model.addAttribute("listType", this.typeService.listType());
model.addAttribute("category", new Category());
model.addAttribute("listCategory", this.categoryService.listCategory());
return "types";
}
@RequestMapping(value = "/types/add", method = RequestMethod.POST)
public String addType(@ModelAttribute("type") Type type, @ModelAttribute("category") Category category){
if (type.getId()==0){
this.typeService.addType(type);
// this.categoryService.addCategory(category);
}else {
this.typeService.updateType(type);
// this.categoryService.updateCategory(category);
}
return "redirect:/types";
}
@RequestMapping("/removetype/{id}")
public String removeType(@PathVariable("id") int id){
this.typeService.removeType(id);
return "redirect:/types";
}
@RequestMapping("/edittype/{id}")
public String editType(@PathVariable("id") int id, Model model){
model.addAttribute("type", typeService.getTypeById(id));
model.addAttribute("listType", typeService.listType());
// model.addAttribute("listCategory", categoryService.listCategory());
return "types";
}
@RequestMapping("typedata/{id}")
public String typeData(@PathVariable("id") int id, Model model){
model.addAttribute("type", typeService.getTypeById(id));
// model.addAttribute("category", categoryService.getCategoryById(id));
return "typedata";
}
}
Types.jsp
Код:
<body>
<a href="../../index.jsp">Back to main menu</a>
<br/>
<br/>
<table class="tg">
<tr>
<th>
<c:if test="${!empty type.sort}">Edit existing type</c:if>
<c:if test="${empty type.sort}">Add new type</c:if>
</th>
</tr>
<tr>
<td>
<c:url var="addAction" value="/types/add"/>
<form:form action="${addAction}" commandName="type">
<table>
<c:if test="${!empty type.sort}">
<tr>
<td><form:label path="id"><spring:message text="ID"/></form:label></td>
<td><form:input path="id" readonly="true" size="8" disabled="true"/><form:hidden path="id"/></td>
</tr>
</c:if>
<tr>
<td><form:label path="sort"><spring:message text="Sort"/></form:label></td>
<td><form:input path="sort"/></td>
</tr>
<tr>
<td><form:label path="category"><spring:message text="Category"/></form:label></td>
<td>
<form:select path="category" cssStyle="width: 200px;">
<form:option value="-1">Select a category</form:option>
<c:forEach items="${listCategory}" var="category">
<form:option value="${category.id}">${category.name_category}</form:option>
</c:forEach>
</form:select>
</td>
</tr>
<tr>
<td colspan="2">
<c:if test="${!empty type.sort}"><input type="submit" value="<spring:message text="Edit Type"/>"></c:if>
<c:if test="${empty type.sort}"><input type="submit" value="<spring:message text="Add Type"/>"></c:if>
</td>
</tr>
</table>
</form:form>
</td>
</tr>
</table>
<c:if test="${!empty listType}">
<table class="tg">
<tr>
<th width="60">ID</th>
<th width="150">Sort</th>
<th width="150">Category</th>
<th width="50">Edit</th>
<th width="50">Delete</th>
</tr>
<c:forEach items="${listType}" var="type">
<tr>
<td>${type.id}</td>
<td><a href="/typedata/${type.id}" target="_blank">${type.sort}</a></td>
<td>${type.category.name_category}</td>
<td><a href="<c:url value="/edittype/${type.id}"/>">Edit</a></td>
<td><a href="<c:url value="/removetype/${type.id}"/>">Delete</a></td>
</tr>
</c:forEach>
</table>
</c:if>
</body>
typedata.jsp
Код:
<table class="tg">
<tr>
<th width="60">ID</th>
<th width="120">Sort</th>
<th width="120">Category</th>
</tr>
<tr>
<td>${type.id}</td>
<td>${type.sort}</td>
<td>${type.category.name_category}</td>
</tr>
</table>