2013-11-27 2 views
0

Новинка к весне (и HTML/формам и тому подобное) и долгое время застряла в этой проблеме.Принесите страницу формы jsp после предыдущей отправки (java spring)

Так что я хочу, чтобы на первой странице вы вводили имя пользователя. Затем нажмите «Отправить» и перейдите на панель управления (в конечном счете, появится страница со списком подключенных пользователей, загрузка кнопок отправки для отправки предопределенных сообщений - с помощью qpid jms).

На первой странице в порядке, но я нажимаю отправить, и я получаю сообщение об ошибке (java.lang.IllegalStateException: Ни BindingResult, ни обычный целевой объект для имени боб «dashboardModel» доступны как атрибут запроса) Это происходит только тогда, если у меня есть форма: форма в dashboard.jsp. Я буквально понятия не имею, как это исправить, и попробовал все, что смог найти. Мой код прост, и просто модифицирован из учебника, так вот она:

login.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<html> 
<head> 
<title>Spring MVC Form Handling</title> 
</head> 
<body> 
<h2>Login Page:</h2> 
<form:form modelAttribute="loginModel" method="POST" 
    action="/HelloWeb/dashboard"> 
    <table> 
     <tr> 
      <td><form:label path="username">Name</form:label></td> 
      <td><form:input path="username" /></td> 
     </tr> 
     <tr> 
      <td colspan="2"><input type="submit" value="Submit" /></td> 
     </tr> 
    </table> 
</form:form> 
</body> 
</html> 

Login.java

package com.tutorialspoint; 
public class Login { 
private String username; 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 
} 

LoginController.java

package com.tutorialspoint; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.ui.ModelMap; 

@Controller 
public class LoginController { 

@RequestMapping(value = "/login", method = RequestMethod.GET) 
public ModelAndView login() { 
    return new ModelAndView("login", "loginModel", new Login()); 
} 

@RequestMapping(value = "/loggedIn", method = RequestMethod.POST) //never actually used 
public String loggedIn(@ModelAttribute("Login") Login login, ModelMap model) { 
    model.addAttribute("username", login.getUsername()); 

    return "dashboard"; 
} 
} 

dashboard.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<html> 
<head> 
<title>DASHBOARD</title> 
</head> 
<body> 
<table> 
    <tr> 
     <td>Dashboard</td> 
     <td>DASHBOARD</td> 
    </tr> 
    <tr> 
     <td>Username</td> 
     <td>${username}</td> 
    </tr> 
    <tr> 
     <td>variable</td> 
     <td>${variable}</td> 
    </tr> 
</table> 

<form:form modelAttribute="dashboardModel" method="POST" 
    action="/HelloWeb/dashboard"> 
    <table> 
     <tr> 
      <td><form:label path="variable">Name</form:label></td> 
      <td><form:input path="variable" /></td> 
     </tr> 
     <tr> 
      <td colspan="2"><input type="submit" value="Submit" /></td> 
     </tr> 
    </table> 
</form:form> 
</body> 
</html> 

Dashboard.java

package com.tutorialspoint; 

public class Dashboard { 
private String variable; 

public String getVariable() { 
    return variable; 
} 
public void setVariable(String variable) { 
    this.variable = variable; 
} 
} 

DashboardController.java

package com.tutorialspoint; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.ui.ModelMap; 

@Controller 
public class DashboardController { 
@RequestMapping(value = "/dashboard", method = RequestMethod.GET) 
public ModelAndView dashboard() { 
    return new ModelAndView("dashboard", "dashboardModel", new Dashboard()); 
} 

@RequestMapping(value = "/dashboard", method = RequestMethod.POST) 
public String addVariable(@ModelAttribute("SpringWeb") Dashboard dashboard, 
     ModelMap model) { 
    model.addAttribute("variable", dashboard.getVariable()); 
    return "dashboard"; 
} 
} 

Спасибо за ваше время.

ответ

0

Я думаю, что проблема здесь:

<form:form modelAttribute="loginModel" method="POST" action="/HelloWeb/dashboard"> 
          ^^^^^^^^^^ 

и здесь:

@RequestMapping(value = "/loggedIn", method = RequestMethod.POST) //never actually used 
public String loggedIn(@ModelAttribute("Login") Login login, ModelMap model) { 
             ^^^^^ 

Значение modelAttribute на form:form элемента и @ModelAttribute аргумент должен быть таким же.

Я имею в виду:

@RequestMapping(value = "/loggedIn", method = RequestMethod.POST) //never actually used 
public String loggedIn(@ModelAttribute("loginModel") Login login, ModelMap model) { 
             ^^^^^^^^^^ 

Edit:

Кроме того, форма часть должна быть такой:

<form:form modelAttribute="dashboardModel" method="POST" action="/loggedIn.htm"> 
    <table> 
     <tr> 
     <td>Name</td> 
     <td><form:input path="username" /></td> 
     </tr> 
     <tr> 
     <td colspan="2"><input type="submit" value="Submit" /></td> 
     </tr> 
    </table> 
</form:form> 
+0

Это на самом деле не кажется, важно, что значение есть - Я понятия не имею, почему. Например. вы можете увидеть из оригинального учебника (http://www.tutorialspoint.com/spring/spring_mvc_form_handling_example.htm), который получил «SpringWeb» в качестве атрибута @ModelAttribute, однако это просто «команда» по умолчанию для другого, t. – Phil

+0

Прости, я что-то пропустил. Оформить заказ. – nashuald

+0

Извините, в какой форме? Один в login.jsp или dashboard.jsp? – Phil

Смежные вопросы