我有一个带有2个复选框和一个提交按钮的简单表单。当我提交表单时,出现此错误Spring MVC复选框HTTP状态400客户端发送的请求在语法上是不正确的
HTTP状态400客户端发送的请求在语法上不正确。
这是我的POJO:
public class Menu{
private String day;
private String name;
private int price;
public Menu(){
}
public Menu(String day, String name, int price) {
this.day = day;
this.name = name;
this.price = price;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDay() {
return day;
}
public void setDay(String l) {
this.day = l;
}
@Override
public int hashCode() {
int hash = 3;
hash = 7 * hash + this.day.hashCode();
hash = 7 * hash + this.name.hashCode();
return hash;
}
@Override
public boolean equals(Object object) {
boolean result = false;
System.out.println("ARE YOU EVER CALLLED HOW MANY TIMES");
if (object == null || object.getClass() != getClass()) {
result = false;
} else {
Menu sc = (Menu) object;
if (this.day == sc.getDay() && this.name == sc.getName()
&& this.price == sc.getPrice()) {
result = true;
}
}
return result;
}
这是我的Order类:
public class Order {
private List<Menu> menus = new ArrayList<Menu>();
public Order(){}
public Order(ArrayList<Menu> menus){
this.menus = menus;
}
public List<Menu> getMenus() {
return menus;
}
public void setMenus(ArrayList<Menu> menus) {
this.menus = menus;
}
}
这是我的控制器:
@Controller
public class RestaurantController {
@RequestMapping(value = "/menu", method = RequestMethod.GET)
public String menuPage(Model model){
Order o = new Order();
ArrayList<Menu> m = new ArrayList<Menu>();
m.add(new Menu("Sunday", "Phir Aloo", 12));
m.add(new Menu("Sunday", "Phir Cholay", 9));
model.addAttribute("today", m);
model.addAttribute("order", o);
return "/menu";
}
@RequestMapping(value = "/confirm", method = RequestMethod.POST)
public String done(@ModelAttribute(value="order") Order order, Model model){
return "/confirm";
}
这是我的菜单。 jsp:(http://localhost:9080/res/menu)
<form:form modelAttribute="order" method="post" action="/res/confirm">
<c:forEach items="${today}" var="r">
<form:checkbox path="menus" value="${r}" label="${r.name } ${r.price }" />
</c:forEach>
<input type="submit" value="Submit Data">
</form:form>
现在我只希望Class Order的属性'menus'被选中的复选框填充。相反,我得到这个错误“由客户端发送的请求是语法不正确的。我已经看过了这个网站上的每一个可能的答案,但似乎没有任何要解决的问题。
后@R张以芳的建议我能。要解决的问题这里是我的属性编辑器
public class MenuTypeEditor extends PropertyEditorSupport {
public void setAsText(String text) {
setValue(new Menu(text.toUpperCase()));
}
}
我保持了具有Menu.java和Order.java
现在在我的控制器写这同一个包里面这个类:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Menu.class, new MenuTypeEditor());
}
瞧!魔术发生了。
我希望这个答案可以帮助别人。
什么是您的应用程序URL? – hagrawal
@hagrawal http:// localhost:9080/res/menu –