2017-05-30 6 views
0

Ich fange an, ein Projekt im Frühjahr mvc zu machen, und ich habe einige Zweifel, wenn Typen von jsp zum Controller bekommen.Problem persistierende Daten im Frühjahr mvc

Im Moment habe ich (jsp):

<form method="POST" action="pb.html">   
<h2>Description: <textarea style="resize:none;" name="description" form="usrform" maxlength="47"></textarea><h2> 
<br>   
Number: <input type="number" min="1" value="1" name="number" /> 
<input type="submit" value="Create Volume" /> 
</form> 

Mein Controller:

package book; 

import javax.servlet.http.HttpServletRequest; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class BookController { 

@Autowired 
private BookDao bookDAO; 

@RequestMapping(value="/book") 
public ModelAndView BOOKSTORE(HttpServletRequest request) { 
String description = request.getParameter("description"); 
String number = request.getParameter("number"); 

if(description != null && number != null)  
bookDAO.persist(new Book(description, Integer.parseInt(number))); 

// Prepare the result view (book.jsp): 
return new ModelAndView("book.jsp", "bookDao", bookDAO); 
} 
} 

Es dass meine Daten scheint nicht beibehalten, weil der contoller nicht das Textfeld in einen String umwandeln kann, und aus irgendeinem Grund kann es die Zahl nicht umwandeln.

sagen Einige Seiten in jsp zu verwenden, die folgenden:

<h2>Description: <input type="text" name="description"></input><h2> 
<br>   
Number: <input type="text" name="number" /> 

Aber dieser Sinn für mich nicht machen, weil ich möchte der Benutzer die vollständige Beschreibung anzuzeigen (so brauche ich einen Textbereich) und Ich möchte nur, dass der Benutzer Zahlen in das Zahlenfeld eingibt, daher ist es sinnvoller, die Tye-Nummer zu verwenden.

Kann mir jemand helfen?

Grüße

+1

Fügen Sie dem Modell das gespeicherte Buch und nicht das Dao hinzu und verwenden Sie die Sprungmarken, um das Ergebnis zu binden. –

Antwort

0

versuchen diesen Code zu verwenden

@RequestMapping(value="/book") 
public ModelAndView BOOKSTORE(HttpServletRequest request, ModelAndView mav) { 
String description = request.getParameter("description"); 
String number = request.getParameter("number"); 

Book book=new Book(); 
if(description != null && number != null){ 
    book=new Book(description, Integer.parseInt(number)); 
    bookDAO.persist(book); 
} 

mav.setViewName("book"); 
mav.addObject("book", book); 
return mav; 
} 
} 
+0

Mit diesem Code bekomme ich einen Fehler: javax.servlet.ServletException: java.lang.InstantiationException: Bean bookDao nicht innerhalb des Bereichs –

+0

Ich musste auch ändern mav.setViewName ("Buch"); zu mav.setViewName ("book.jsp"); sonst würde ich einen Fehler bekommen 404 –

+0

Wenn ich mav.addObject ändere ("Buch", Buch); zu mav.addObject ("bookDao", bookDAO); Das Programm gibt mir keinen Fehler, aber es wird auch nicht angezeigt, wenn ich auf "Senden" klicke. –

0

Problem gelöst,

Ich hatte die Nummer als String an die Java-Klasse und in der Java-Klasse zu übergeben ich die Null-tat Validierung:

Controller:

@RequestMapping(value="/book") 
public ModelAndView BOOKSTORE(HttpServletRequest request) { 
String description = request.getParameter("description"); 
String number = request.getParameter("number"); 

if(description != null)  
bookDAO.persist(new Book(description, number)); 

// Prepare the result view (book.jsp): 
return new ModelAndView("book.jsp", "bookDao", bookDAO); 
} 

Java:

/** 
* 
* @param description 
* @param number 
*/ 
public Book(String description, String number){ 
    this.pbi_description = description; 

    if(number!= null) 
     this.number= Integer.parseInt(number); 
} 

Allerdings sollte es möglich sein, diese Validierung in der Steuerung zu tun.

+0

löste das Problem, es gab ein Problem in meinem JSP, ich hatte die Nummer als Liste gesetzt. –