【发布时间】:2016-03-28 18:10:54
【问题描述】:
请帮我解决错误。我正在学习 Spring MVC。我无法解决这个问题。我浏览了许多论坛和网站,但我找不到或解决它。但是,我知道这个问题是由于表单标签中的 commandName 造成的。如果我删除,我可以转到该页面。
我的问题是: 我有一个登录表单,其中有很多用户级别。
login.jsp
<sf:form commandName="userLogin" action="${pageContext.request.contextPath}/userLogin" method="POST">
<sf:input path="UserName" type="text" name="UserName" class="form-control input-lg" id="focusedInput" />
<sf:errors path="UserName" cssClass="alert alert-danger"></sf:errors>
<sf:input path="password" type="password" class="form-control input-lg" name="password" id="focusedInput" />
<sf:errors path="password" cssClass="alert alert-danger"></sf:errors>
<label for="sel1">Login as:<sup>*</sup></label>
<sf:select path="userLevel" class="form-control input-lg" id="sel1" name="userLevel">
<option value="">Select User</option>
<option value="tenant">Tenant</option>
<option value="manager">Manager</option>
<option value="vendor">Vendor</option>
<option value="admin">Administrator</option>
</sf:select>
<sf:errors path="userLevel" cssClass="alert alert-danger"></sf:errors>
<input type="submit" value="Login" name ="form1" class="btn btn-success btn-md">
</sf:form>
我的控制器类是
HomeController.java
@Controller
public class HomeController {
@RequestMapping("/")
public String showHome(Model model){
model.addAttribute("title", "Welcome to Wildwood Apartment");
return"home";
}
@RequestMapping("/adminHome")
public String showAdmin(Model model){
model.addAttribute("title", "Welcome to Wildwood Administrator Page");
return"admin";
}
@RequestMapping("/managerHome")
public String showManager(Model model){
model.addAttribute("title", "Welcome to Manager's Dashboard");
return"manager";
}
@RequestMapping("/login")
public String login(Model model){
model.addAttribute("title", "Login Page");
return"login";
}
@RequestMapping(value="/userLogin", method=RequestMethod.POST)
public String loginAction(Model model, @ModelAttribute("userLogin") @Valid Login userLogin, BindingResult result){
if(result.hasErrors()){
model.addAttribute("title", "Login Page");
return"login";
}
model.addAttribute("userLogin", new Login());
return"redirect:/adminHome";
}
我的豆类 Login.java
public class Login {
@Size(min=3, max=15)
private String userName;
@Size(min=3, max=15)
private String password;
@NotBlank
private String userLevel;
//private int userid;
public Login(){}
public Login(String userName, String password, String userLevel){
this.userName = userName;
this.password = password;
this.userLevel = userLevel;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserLevel() {
return userLevel;
}
public void setUserLevel(String userLevel) {
this.userLevel = userLevel;
}
}
我的Web.xml
<display-name>WWMVC</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>WHome</display-name>
<servlet-name>WHome</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WHome</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/jagan</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
我的调度程序 Servlet WHome-servlet.java
<jee:jndi-lookup jndi-name="jdbc/jagan" id="dataSource"
expected-type="javax.sql.DataSource">
</jee:jndi-lookup>
<context:component-scan base-package="controller"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:resources mapping="/bootstrap/**" location="/bootstrap/" />
在我的主页中,我有一个登录页面链接:
**<li><a href="${pageContext.request.contextPath}/login">LOGIN</a></li>**
我得到的错误信息是 HTTP 状态 500 - java.lang.IllegalStateException:Bean 名称 'userLogin' 的 BindingResult 和普通目标对象都不能用作请求属性
注意:我只复制并粘贴了大部分重要代码。此外,我使用 maven 和 bootstrap 进行设计。我可以转到我的主页,但是当我单击登录链接时,我收到了上述错误。
提前致谢。
贾根
【问题讨论】:
-
您会得到它,因为没有具有该名称的对象。在您的模型中,您只需添加
title。 -
您好 Denium,感谢您的 cmets。现在可以了。但是,请您详细解释一下。这样,我就可以理解机制了。我的意思是模型、对象、commandName 和 modelAttributes 之间的联系是什么。谢谢。
标签: java spring spring-mvc