2016-05-11 20 views
0

Ich habe ein Formular mit einem Eingabetext und einem Textfeld erstellt. Der Eingabetext funktioniert gut, aber textarea wird nicht einmal angezeigt: /.Spring Thymeleaf + Textarea

<div id = "news" th:fragment = "admin_panel"> 
    <form method = "POST" th:action="@{/addNews}" th:object = "${news}" id = "myform"> 

     Tytuł: <input type = "text" th:field = "*{title}" /> 
     <input type = "submit" value = "Wstaw" /> 

    </form> 

    <textarea name = "news_content" rows = "20" cols = "80" th:field = "${news.content}" form = "myform" >... </textarea> 
</div> 

Als ich die „th: Feld“ Lösche das Textfeld angezeigt wird und wenn ich th verwenden: Wert statt th: Feld ist es auch, aber angezeigt dont't den writted Text speichern (Nachrichten news.content. Titel ist gespeichert ok).

Ich habe keine Idee .. Ich lese thymeleaf Referenzen, aber kann keine Antwort finden, also bitte helfen guten Menschen!

Antwort

1

Sie müssen den ausgewählten Objektausdruck verwenden *{content} UND platzieren Sie das Textarea-Tag innerhalb des Formular-Tags!

Am Ende ist alles über das generierte name Attribut in der resultierenden Form. Der Name muss propertyAccessor aus dem ausgewählten Stammobjekt th:object entsprechen. Die Form wird im Frühling verarbeitet (ohne Thymoleaf-Abfangen).

Die docs über den Frühling Integration sind wirklich gut: http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html

Sie erklären dies:

Werte für th: Feldattribute müssen Auswahl Ausdrücke (* {...}) sein, die das Gefühl gegeben macht Tatsache ist, dass sie auf der Form-Backing-Bean und nicht auf den Kontextvariablen (oder Modellattributen in Spring MVC-Jargon) ausgewertet werden.


EDIT: Dank der Link zu dem Projekt, das Update war einfach:

  • Thymeleaf 3.0.0.BETA03 hatte einen Fehler in dem Textprozessor, Umzug nach 3.0.0 .RELEASE hat dieses Problem behoben
  • Zusätzlich habe ich das Textfeld in das Formularelement verschoben.
+0

funktioniert nicht:/... Außerdem meiner Meinung nach $ {news.content} ist gleich * {content} wenn wir th: object = $ {news}. Irgendwelche anderen Lösungen? – Bambelal

+0

In der Tat hätte ich gesagt, dass Sie eine Ausnahme von Thymeleaf bekommen sollten, aber das ist nur aus meiner Erinnerung. Th: Feld "benötigt" einen Objektausdruck. Wahrscheinlich haben Sie einen Tippfehler/falschen Charakter und der Ausdruck wird nie ausgewertet? Werfen Sie einen Blick auf das Endergebnis und geben Sie es hier ein: th: field –

+0

Über Ausnahmen: SEVERE: Servlet.service() für Servlet [Dispatcher] im Kontext mit path [/ eniupage] warf Ausnahme [Anfrage Verarbeitung fehlgeschlagen; verschachtelte Ausnahme ist org.thymeleaf.exceptions.TemplateProcessingException: Fehler bei der Ausführung von Prozessor 'org.thymeleaf.spring4.processor.SpringTextareaFieldTagProcessor' (Vorlage: "templates/fragments" - Zeile 144, Spalte 60)] mit der Ursache java.lang. StringIndexOutOfBoundsException: String-Index außerhalb des Bereichs: 0 – Bambelal

0

Über Ausnahmen:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/eniupage] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring4.processor.SpringTextareaFieldTagProcessor' (template: "templates/fragments" - line 144, col 60)] with root cause 
java.lang.StringIndexOutOfBoundsException: String index out of range: 0 

In meiner Form gibt es die Texteingabe und Textbereich wie Sie sehen. news.title ist ok gespeichert, aber news.content nicht. Wenn ich diese Parameter für den Test ersetze (in der Texteingabe benutze ich news.content und in textarea gibt es th: field = $ {news.title}) funktioniert es auch gut. Vielleicht sollte ich einen anderen Ausdruck anstelle von th: field verwenden?

News.java

package eniupage.domain; 

public class News 
{ 
    private String title; 
    private String content; 
    private Date date; 

    public String getTitle() 
    { 
     return title; 
    } 
    public void setTitle(String title) 
    { 
     this.title = title; 
    } 
    public String getContent() { 
     return content; 
    } 
    public void setContent(String content) 
    { 
     this.content = content; 
    } 
    public Date getDate() 
    { 
     return date; 
    } 
    public void setDate(Date date) 
    { 
     this.date = date; 
    } 

} 

HomeController.java

Paket eniupage.web;

@Controller 
@RequestMapping("/") 
public class HomeController 
{ 

    @Autowired 
    AddNewsService addNewsService; 

    @RequestMapping(method = GET) 
    public String home(Model model) 
    { 
     model.addAttribute("newses", addNewsService.getNewses()); 
     return "home"; 
    } 

    @RequestMapping(value = "/addNews", method = POST) 
    public String addNews(News news) 
    { 
     addNewsService.addNews(news); 
     return "redirect:/"; 
    } 

} 

AdminController.java

@Controller 
@RequestMapping("/admin") 
public class AdminController 
{  
    @RequestMapping(method = GET) 
    public String admin(Model model) 
    { 
     model.addAttribute(new News()); 
     return "admin"; 
    } 

} 

Es gibt keine resultierende HTML-Form ist, weil es nicht einmal in div angezeigt wird. Es gibt nur Texteingabe und Übermittlungsschaltfläche.

Edited html:

<form action="#" method = "POST" th:action="@{/addNews}" th:object = "${news}" id = "myform"> 

      Tytuł: <input type = "text" th:field = "*{title}" /> 

      <input type = "submit" value = "Add" /></br> 

      <textarea rows = "20" cols = "80" th:field = "*{content}" form = "myform" >... </textarea> 


     </form> 

I thymeleaf 3.0 mit bin. Vielleicht ist das ein Grund?

In Bezug I lesen:

„The th:. Feldattribut anders verhält sich abhängig davon, ob es eine angebracht ist, oder einen Tag (und auch in Abhängigkeit von der spezifischen Art des tages)“

Aber ich kann nicht finden, was ist der Unterschied zwischen th: Feld in Eingabe und Textarea verwenden.

Verwandte Themen