我有一個帶有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 –