2016-05-11 4 views
0

Я создал форму с одним входным текстом и одним текстовым полем. Текст ввода отлично работает, но текстовое поле даже не отображается: /.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> 

Когда я удалить «й: поле» отображается текстовое поле и, когда я использую й: значение вместо й: поле он отображается также, но dont't сохранить writted текст news.content (новости. название сохранено в порядке).

У меня нет идеи .. Я читаю ссылки тимелеафа, но не могу найти ответ, поэтому, пожалуйста, помогите хорошим людям!

ответ

1

Вы должны использовать выделенное выражение объекта *{content} И поместите тег textarea внутри тега формы!

В конце концов, это все о сгенерированном атрибуте name в полученной форме. Имя должно соответствовать propertyAccessor от выбранного корневого объекта th:object. Форма обрабатывается весной (без перехвата тимелеафа).

Документов о весенней интеграции действительно хороши: http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html

Они заявляют это:

значения для я: поле атрибутов должен быть выражениями выбора (* {...}), которая имеет смысл учитывая факт, что они будут оцениваться на бланке формы, а не на переменных контекста (или атрибутах модели в жаргоне Spring MVC).


EDIT: Благодаря ссылке на проект, исправление было легко:

  • Thymeleaf 3.0.0.BETA03 была ошибка в процессоре TEXTAREA, двигаясь в 3.0.0 .RELEASE исправил этот вопрос
  • Кроме того, я переместил текстовое поле внутри элемента формы.
+0

не работает:/... Кроме того, на мой взгляд, $ {news.content} равно * {content}, когда мы использовали th: object = $ {news}. Любые другие решения? – Bambelal

+0

На самом деле я бы сказал, что вы даже должны получить исключение из тимелеафа, но это только из моей памяти. Th: поле «нуждается» в выражении объекта. Возможно, у вас есть символ typo/false, и выражение никогда не оценивается? Посмотрите на окончательный результат и опубликуйте его здесь, используя th: поле –

+0

Об исключениях: SEVERE: Servlet.service() для сервлета [диспетчера] в контексте с пуском [/ eniupage] бросил исключение [Обработка запроса не удалась; Вложенное исключение - org.thymeleaf.exceptions.TemplateProcessingException: ошибка во время выполнения процессора «org.thymeleaf.spring4.processor.SpringTextareaFieldTagProcessor» (шаблон: «шаблоны/фрагменты» - строка 144, col 60)] с основной причиной java.lang. StringIndexOutOfBoundsException: индекс строки за пределами диапазона: 0 – Bambelal

0

О исключений:

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 

В моей форме есть ввод текста и текстовое поле, как Вы видите. news.title сохраняется нормально, но news.content не. Когда я заменяю для проверки этих параметров (в текстовом вводе я использую news.content, а в textarea есть th: field = $ {news.title}), он тоже хорошо работает. Может быть, мне следует использовать другое выражение вместо th: field?

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

пакет 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"; 
    } 

} 

Существует не в результате чего из HTML формы, потому что она даже не отображаются в делах. Есть только кнопка ввода текста и отправки.

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> 

Я использую thymeleaf 3.0. Может быть, это причина?

В ссылке я прочитал:

«-й:. Атрибут поля ведет себя по-разному в зависимости от того, является ли он прикреплен к апу, или тег (а также в зависимости от конкретного типа тега)»

Но я не могу найти, что это за различие между использованием поля: in input и textarea.