enctype = "multipart / form-data" уничтожил мое приложение - PullRequest
0 голосов
/ 28 января 2019

Я делаю простое приложение Spring MVC, также я читаю Spring in Action 3rd edition.Я пришел к главе с загрузкой файлов.Для этого мне нужно добавить enctype = "multipart / form-data" в тег .Когда я сделал это, моя sf: форма перестала работать, поэтому я нашел, как это исправить вопрос на этом веб-сайте и заменил на , теперь он полностью сломан, и я не знаю, как это сделать.исправить это, когда я делаю пост-запрос, я получаю ошибку

Обязательный параметр String 'name' отсутствует

Моя форма (введение опущено):

 <div class="center">
 <h1>Add a book!</h1>
  <fieldset>
    <form method="post" action="/books"  acceptCharset="utf-8" 
     enctype="multipart/form-data">
    <table>
        <tr>
            <td>Name</td>
            <td><input type="text" name="name"> <sf:errors path="name" cssClass="isa_error"/></td>
        </tr>
        <tr>
            <td>Desc</td>
<td><textarea cols="50" rows="11" name="desc">Опис</textarea></td>
        </tr>
        <tr>
            <td>Author</td>
            <td><input name="aut" type="text"> <sf:errors path="aut" cssClass="isa_error"/></td>

        </tr>
        <tr>
            <td>Year</td>
            <td><input name="year" type="text"><sf:errors path="year" cssClass="isa_error"/></td>
        </tr>
        <tr>
            <td>Price</td>
            <td><input name="price" type="text"> <sf:errors path="price" cssClass="isa_error"/></td>
        </tr>
        <tr>
            <td><input type="file" name="image" ></td>
        </tr>
        <tr>
            <td><input type="submit" value="add"></td>
        </tr>
    </table>
</form>
<p>
<form action="/books"   method="get" >
    <input type="submit" value="Повернутися">
</form>
</p>
</fieldset>

И отображение:

  @PostMapping("/books")
public String add( @RequestParam("name") String name,@RequestParam("desc") String desc,@RequestParam("book") String aut,@RequestParam("year") String year,@RequestParam("price") int price, BindingResult result, @RequestParam(name = "image", required = false) MultipartFile image){
    if (result.hasErrors()) return "addBook";
    Book book = new Book();
    book.setAut(aut);
    book.setName(name);
    book.setDesc(desc);
    book.setYear(year);
    book.setPrice(price);

         service.add(book);
        try {
            if (!image.isEmpty()) {
                validateImg(image);

            }
        } catch (IOException ex){
            result.reject(ex.getMessage());
            return "books";
        }

         return "redirect:/books";
}
@GetMapping(value = "/books", params = "new")
public String addBook(Model model){
 model.addAttribute("book",new Book());
 return "addBook";
}

Кроме того, даже если я могу это исправить, как сделать проверку моей сущности книги, я думаю, что она тоже будет сломана

Entity ::

      @Table(name = "library")
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idLibrary")
private int id;
@Column(name = "bookName")
@Size(min = 3,message = "Назва має складатися мінімум з 3 букв")
@NotEmpty
private String name;
@NotEmpty(message = "Не можу бути пустим!")
@Column(name = "Author")
private String aut;
@Column(name = "Descriptions")
private String desc;
@Column(name = "Year")
@NotEmpty(message = "Не може бути пустим!")
@Size(min =1,max=4, message = "Некорректний рік")
private String year;
@Column(name = "Price")
@NotNull(message = "Не можу бути пустим!")
@NotNegative(message = "Від'ємна ціна!")
private int price;

И геттеры / сеттеры (NotNegative - моя пользовательская аннотация)

1 Ответ

0 голосов
/ 29 января 2019

Я исправил идентификатор, добавив компонент MultipartResolver в мой Config.

    @Bean
    public MultipartResolver multipartResolver(){
    StandardServletMultipartResolver resolver = new StandardServletMultipartResolver();
    return resolver;
}

Также мне нужно было применить его к моему диспетчеру

MultipartConfigElement multipartConfig = new 
MultipartConfigElement(
            "c:/temp", 50000000, 50000000, 0);
    dispatcher.setMultipartConfig(multipartConfig);

надеюсь, что мое решение поможет smbd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...