2012-05-18 2 views
1

Я ссылался на пример весеннего приложения на netbeans.org и пытался создать простую заявку для входа. Когда я бегу, я получаю эту ошибку:Ошибка Spring 2.0 MVC: ни BindingResult, ни простой целевой объект для имени бина «логин» доступен как атрибут запроса

javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Neither BindingResult nor plain target object for bean name 'login' available as request attribute

Вот моя Login.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Business SMS Login</title>    
</head> 

<body> 
    <div id="mainContainer"> 
     <spring:nestedPath path="login"> 
     <form name="frmBSMSLogin" action="" method="post"> 
     <div id="controls"> 
      <div id="lgnUsername"> 
       <label for="txtUsername">Username</label>      
       <spring:bind path="login.username"> 
        <input type="text" name="${status.expression}" value="${status.value}" id="txtUsername" maxlength="20" class="textInput"/> 
       </spring:bind> 
      </div> 
      <br/> 
      <div id="lgnPassword"> 
       <label for="txtPassword">Password:</label> 
       <spring:bind path="login.password"> 
        <input type="password" id="txtPassword" maxlength="20" name="${status.expression}" value="${status.value}" class="textInput"/> 
       </spring:bind> 
      </div> 
     </div> 

     <div id="submitSection"> 
      <input type="button" value="Submit" class="buttonInput"/> 
      <input type="reset" value="Reset" class="buttonInput"/> 
     </div> 
     </form> 
     </spring:nestedPath> 
    </div> 
</body> 

Вот LoginController.java

package controller; 

import org.springframework.web.servlet.mvc.SimpleFormController; 
import java.net.*; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.web.portlet.ModelAndView; 
import service.Login; 

public class LoginController extends SimpleFormController { 
private Login login; 
public LoginController() { 
    setCommandClass(GetLoginDetails.class); 
    setCommandName("login"); 
    setSuccessView("dashboard"); 
    setFormView("index"); 
} 

public void setLogin(Login login){ 
    this.login = login; 
} 

protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)throws Exception {   
    //System.out.println("are we here?"); 
    GetLoginDetails l = (GetLoginDetails) command; 
    ModelAndView mv = new ModelAndView(getSuccessView()); 
    mv.addObject("helloMessage", login.authenticate(l.getUsername(),l.getPassword())); 
    return mv; 
}  

}

Это applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 

<bean name="login" class="service.Login"/> 

</beans> 

Я был на этой вещи, так как последний целую неделю, я думаю. Я делаю это, ссылаясь на пример netbeans. Вот ссылка http://netbeans.org/kb/docs/web/quickstart-webapps-spring.html. Я не нашел для этого никакого решения. Начните с PHP-фона. Я уже нахожу, что весенняя основа слишком сложна, но я стараюсь изо всех сил. Я использую Netbeans как свою IDE. Это хороший выбор, или Eclipse является стандартным? Также, пожалуйста, дайте мне несколько советов о том, как отлаживать приложение. простое эхо или print_r, как в php, здесь слишком много роскоши :)

P.s Я ранее публиковал аналогичный вопрос, и кто-то из нас здесь жаловался на то, что он был дампом кода и уменьшил меня. Есть много вопросов, где есть огромная свалка кода, но люди были достаточно любезны, чтобы помочь. Поэтому любой, кто считает, что это свалка кода или несколько грубый язык, не тратьте свое драгоценное время на то, чтобы решить этот вопрос. Я настоящая обучающийся здесь, чтобы попросить о помощи

+0

весной 3.0 почему вы используете SimpleFormController? почему бы не попробовать аннотировать способ выполнения контроллера с помощью '@ Controller'? – raddykrish

+0

спасибо за ваше предложение. Но, как я уже упоминал в своей проблеме, я только начал с весны. Я просто последовал за учебником. Я не знаю iota, о чем вы говорите об аннотации. – Shades88

+0

Да, я видел совершенно другой подход к весне в нескольких других примерах. Но так как у меня были netbeans и учебник был разработан для этого, я пошел с ним. Я пошел на собственный сайт Spring и попробовал там пример приложения. Это было так чертовски сложно и весь беспорядок xml для даже скрипта муравья, он был почти отталкивающим.Иногда я думаю, что такие вещи, как весна, никогда не станут моей чашкой чая после того, как делают вещи для детей, например, php: D – Shades88

ответ

1

Try удалить

<spring:nestedPath path="login"> 

после

<body> 
    <div id="mainContainer"> 

весны: nestedPath - Устанавливает вложенный путь, который будет использоваться путем для привязки метки.

UPD:

Читайте об этом теге here

+0

, которые я пробовал, но это не сработало, дало мне ту же ошибку. I jst удалил вложенные теги пути. но весенний тег привязки все еще существует. Я думаю, они должны быть там, чтобы служба могла получить доступ к полям формы правильно? – Shades88

+0

Извините за поздний ответ. В вашем случае вы можете удалить spring: nestedPath ИЛИ не использовать «login». весной: bind (например, вам нужно написать ) –

1

имел ту же ошибку, используя форму Спринга тег. решена путем добавления modelAttribute:

<form:form modelAttribute="hall" method="post" action="saveChanges"> 

надеюсь, что это поможет как-то