Comment obtenir un formulaire de données après que l'utilisateur l'a présenté avec Spring MVC?
je reçois un message d'erreur:
org.springframework.web.util.NestedServletException: traitement de la Requête a échoué; nested exception java.lang.ClassCastException: java.lang.L'objet ne peut pas être lancé pour com.crimetrack.d'affaires.Connexion
Login.java
public class Login {
private String userName;
private String password;
private boolean loggedin;
public Login(){};
/**
* @return the loggedin
*/
public boolean isLoggedin() {
return loggedin;
}
/**
* @param loggedin the loggedin to set
*/
public void setLoggedin(boolean loggedin) {
this.loggedin = loggedin;
}
/**
* @param userName
* @param password
*/
public Login(String userName, String password) {
this.userName = userName;
this.password = password;
}
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
}
@Controller
public class AuthenticationController {
private final Logger logger = Logger.getLogger(getClass());
private AuthenticationManager authenticationManager;
private Login login = new Login();
String message = "Congrulations You Have Sucessfully Login";
String errorMsg = "Login Unsucessful";
@RequestMapping(value="login.htm")
public ModelAndView onSubmit(Object command) throws ServletException {
String userName = ((Login)command).getUserName();
String password = ((Login)command).getPassword();
login.setUserName(userName);
login.setPassword(password);
logger.info("Login was set");
logger.info("the username was set to " + login.getUserName());
logger.info("the password was set to " + login.getPassword());
if (authenticationManager.Authenticate(login) == true){
return new ModelAndView("main","welcomeMessage", message);
}
//return new ModelAndView("main","welcomeMessage", message);
return new ModelAndView("login","errorMsg", "Error!!!");
}
}
- La ligne est en train de jeter de l'exception?
- String userName = ((Login)de commande).getUserName(); String mot de passe = ((Login)de commande).getPassword(); Ces deux lignes
Vous devez vous connecter pour publier un commentaire.
D'essayer cette solution:
JSP
Contrôleur
Explication
L'annotation
@ModelAttribute
fait exactement la même chose quemodel.addAttribute(String name, Object value)
. Par exemple,@ModelAttribute Login login
est le même quemodel.addAttribute("login", new Login());
.Cela dit, avec le
onGet
méthode, vous en passant un tel objet à votre vue. Grâce à l'attributmodelAttribute="login"
, la balise<form:form>
se regarder dans le modèle de la liste des attributs pour en trouver un dont le nom estlogin
. S'il ne trouve pas, une exception est levée.Alors, c'est ça la magie de la partie: avec le tag
<form:input path="userName" />
, Spring MVC sera automatiquement réglée à la propriétéuserName
de la fève qui est dans lemodelAttribute="login"
attribut, c'est à dire dans votre cas,login
. Si vous avez mis quelque chose comme<form:input path="wtf" />
, il aurait jeté une exception, parce que la fèveLogin
n'a pas cette propriété.Donc, finalement, sur votre
onSubmit
méthode (merci encore une fois la annotation@ModelAttribute
), vous pouvez accéder à lalogin
bean, précédemment autobinded par Spring MVC.Note
Personnellement, j'ai (presque) jamais utiliser un
ModelAndView
exemple, mais procéder comme suit:Le chemin d'accès à la page JSP est spécifié à l'intérieur de votre web.xml fichier, par exemple:
Vous devriez lire le doc pour obtenir plus d'informations (cf. 16.5 Résoudre les points de vue).
Dans votre "onSubmit" la méthode, vous êtes casting
command
àLogin
.Apparemment, il ne l'est pas.