spring mvc中的commandName错误

时间:2016-03-28 18:10:55

标签: java spring spring-mvc

请帮我解决错误。我正在学习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>

我的Dispatcher 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:BindingResult和bean名称的普通目标对象&#39; userLogin&#39;可用作请求属性

注意:我只复制并粘贴了大部分重要代码。此外,我正在使用maven和bootstrap进行设计。我可以去我的主页但是当我点击登录链接时,我收到了上述错误。

提前致谢。

贾根

1 个答案:

答案 0 :(得分:0)

如果任何人正在学习弹簧形式,那么它可能会有所帮助。因此,我在这里发表评论。 我有一个问题,我没有将空对象发送给表单 例如: 如果我需要用户注册表格:

  1. 我应该有一个User模型类
  2. 在该用户注册表的GetMapping中,我应该发送空的User对象

    @GetMapping(/注册) 公共ModelAndView registerForm(ModelAndView mv){ mv.addObject(“ user”,new User()); .... }

  3. 在春季形式中,我应该有一个属性,名称应该是用户

  4. 在处理表格时,我应该获取modelAttribute并对其进行处理

    公共ModelAndView进程Register(@Valid @ModelAttribute(“ user”)用户,ModelAndView mv){ ...... }

谢谢 贾根