Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何使用thymeleaf和bean验证进行验证?_Spring_Validation_Spring Mvc_Thymeleaf - Fatal编程技术网

Spring 如何使用thymeleaf和bean验证进行验证?

Spring 如何使用thymeleaf和bean验证进行验证?,spring,validation,spring-mvc,thymeleaf,Spring,Validation,Spring Mvc,Thymeleaf,在我看来,我正在尝试执行一个简单的验证,我知道jsf在spring mvc中执行更多操作非常简单,这让我很头疼。。。 有人能帮我验证一下吗?看看我做错了什么 我的模型 package br.com.nextinfo.multimedia.web.model; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.pe

在我看来,我正在尝试执行一个简单的验证,我知道jsf在spring mvc中执行更多操作非常简单,这让我很头疼。。。 有人能帮我验证一下吗?看看我做错了什么

我的模型

package br.com.nextinfo.multimedia.web.model;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotBlank;

@Table
@Entity(name="slideshow")
public class SlideShow {

private Long condigo;

private String titulo;

private String subTitulo;

private ImagemSlider imagemSlider;


@Id 
@GeneratedValue(generator="codigo",strategy=GenerationType.AUTO) 
@SequenceGenerator(name = "codigo", sequenceName = "codigo_slideshow")    
@Column(name = "CODIGO")
public Long getCondigo() {
    return condigo;
}

@NotNull
@NotBlank
@Column(name = "TITULO" ,nullable = false)
public String getTitulo() {
    return titulo;
}
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name ="CODIGO_IMAGEM")
public ImagemSlider getImagemSlider() {
    return imagemSlider;
}

@NotNull
@NotBlank
@Column(name = "SUBTITULO" ,nullable = false)
public String getSubTitulo() {
    return subTitulo;
}

public void setTitulo(String titulo) {
    this.titulo = titulo;
}

public void setSubTitulo(String subTitulo) {
    this.subTitulo = subTitulo;
}


public void setImagemSlider(ImagemSlider imagemSlider) {
    this.imagemSlider = imagemSlider;
}

public void setCondigo(Long condigo) {
    this.condigo = condigo;
}


}
我的控制器

package br.com.nextinfo.multimedia.web.controller;


import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import br.com.nextinfo.multimedia.web.model.ImagemSlider;
import br.com.nextinfo.multimedia.web.model.SlideShow;
import br.com.nextinfo.multimedia.web.services.AbstractFactoryService;
import br.com.nextinfo.multimedia.web.services.CreateSlideShowService;
import br.com.nextinfo.multimedia.web.services.ImagemServiceDatabase;

@Controller
@RequestMapping("/arquivosbanco/")
public class FilesDatabaseController  implements AbstractControllerApp    ,PadraoCrudMetodos<ImagemSlider> {

@Autowired
private ImagemServiceDatabase imagemService;

@Autowired
private CreateSlideShowService slideShowService;

@Override
public String getRequisicaoPadrao(Model model) {
    List<ImagemSlider> lista = this.getAbstractService().realizaPaginacao("0", "10" ,null).getContent();
    model.addAttribute("listaObjetoPageStart", lista);
    model.addAttribute("img", new ImagemSlider());
    return this.getUrlInicial();
}

@Override
public String getUrlInicial() {
    return "arquivos/database/listarquivosbancodedados";
}

@ResponseBody
@RequestMapping(value = "/img", method = RequestMethod.GET)
public void showImage(@RequestParam("id") Long id, HttpServletResponse response,HttpServletRequest request)  throws ServletException, IOException {
    response.setContentType("image/jpeg, image/jpg, image/png, image/gif");
    ImagemSlider imgdatabase =  imagemService.getAbstractService().getBean(id);
    if (imgdatabase!=null ) {
        response.getOutputStream().write(imgdatabase.getImage());
        response.getOutputStream().close();
    }
}

@Override
public AbstractFactoryService<ImagemSlider> getAbstractService() {
    return imagemService;
}
@RequestMapping(value = "/createslideshow/{imagemid}" ,method=RequestMethod.GET)
public String createslider(@PathVariable("imagemid") Long image,Model model){
    final ImagemSlider img  = this.imagemService.getBean(image);
    model.addAttribute("imgslider", img);
    model.addAttribute("slideshow", new SlideShow());

    return "arquivos/createdisplay";
}
@RequestMapping(value = "/save" ,method=RequestMethod.POST)
public String saveSlideShowr( @RequestParam Long imagemid ,@Valid  final SlideShow slideshow,final BindingResult result ,RedirectAttributes redirectAttrs){

    ImagemSlider img  = this.imagemService.getBean(imagemid);
    if (result.hasErrors()) {
        redirectAttrs.addFlashAttribute("org.springframework.validation.BindingResult.strategy", result);
        redirectAttrs.addFlashAttribute("slideshow", slideshow);
        return "redirect:/arquivosbanco/createslideshow/"+imagemid;
    }else{
        this.slideShowService.salva(slideshow);
        if (img != null) {
            slideshow.setImagemSlider(img);
            this.slideShowService.salva(slideshow);
        }
    }
    return this.getUrlInicial();
    }
  }

   <html xmlns:th="http://www.thymeleaf.org"
    xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
    layout:decorator="/templates/layouts/principal">
    <head>
     <title>Criacao slideshow</title>
  </head>
 <body>

<div class="container-fluid" layout:fragment="corpopagina">
    <h3 class="page-header text-center">Criacao slide show</h3>

<form id="registration-form" class="form-horizontal"  th:object="${slideShow}" th:action="@{/arquivosbanco/save/?imagemid=}+${imgslider.codigo}"  method="post">

 <!-- Print all errors here!-->
<div class="col-md-4 col-xs-12">
    <div class="thumbnail">
        <img class="img-responsive" th:attr="src=@{'/upload/img?codigo='+${imgslider.codigo}}" width="400" height="400" />
        <span  class="text-center"></span>
        </div>  
        <div class="caption">
            <h5>Codigo <span th:text="${imgslider.codigo}" class="badge" style="margin-left:20px">5</span></h5>
            <h5>Nome <span th:text="${imgslider.nome}" class="badge" style="margin-left:20px">5</span></h5>
        </div>
    </div>
    <div class="col-md-8 col-xs-12">
            <div class="form-group">
                <label class="col-xs-3 control-label">Titulo principal</label>
                <div class="col-md-8">
                    <input type="text" class="form-control" name="titulo"  /> 
                </div>
            </div>
            <div class="form-group">
                <label class="col-xs-3 control-label">Sub titulo</label>
                <div class="col-md-8">
                    <input type="text" class="form-control input-xs" name="subTitulo" />
                </div>
            </div>
            <div class="form-actions">
                <label class="col-md-3 control-label"></label>
                <div class="col-md-7">
                <button type="submit" class="btn btn-success btn-large">Salvar</button>
                </div>
                <div class="col-md-1"></div>
            </div>
        </div>
    </form>
</div>
</body>
package br.com.nextinfo.multimedia.web.controller;
导入java.io.IOException;
导入java.util.List;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.validation.Valid;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Controller;
导入org.springframework.ui.Model;
导入org.springframework.validation.BindingResult;
导入org.springframework.web.bind.annotation.PathVariable;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.RequestParam;
导入org.springframework.web.bind.annotation.ResponseBody;
导入org.springframework.web.servlet.mvc.support.RedirectAttributes;
导入br.com.nextinfo.multimedia.web.model.ImagemSlider;
导入br.com.nextinfo.multimedia.web.model.SlideShow;
导入br.com.nextinfo.multimedia.web.services.AbstractFactoryService;
导入br.com.nextinfo.multimedia.web.services.CreateSlideShowService;
导入br.com.nextinfo.multimedia.web.services.ImagemServiceDatabase;
@控制器
@请求映射(“/arquivosbanco/”)
公共类FileDatabaseController实现AbstractControllerApp、PadraoCrudMetodos{
@自动连线
私有imagemService数据库imagemService;
@自动连线
私有CreateSlideShowService slideShowService;
@凌驾
公共字符串GetRequisiticaoPadrao(模型){
List lista=this.getAbstractService().realizapaginaao(“0”,“10”,null).getContent();
addAttribute(“listaObjetoPageStart”,lista);
addAttribute(“img”,新的ImagemSlider());
返回这个.getUrlinial();
}
@凌驾
公共字符串getUrlinial(){
返回“arquivos/database/listarquivosbancodedados”;
}
@应答器
@RequestMapping(value=“/img”,method=RequestMethod.GET)
public void showImage(@RequestParam(“id”)Long id,HttpServletResponse,HttpServletRequest请求)抛出ServletException,IOException{
setContentType(“image/jpeg,image/jpg,image/png,image/gif”);
ImagemSlider imgdatabase=imagemService.getAbstractService().getBean(id);
if(imgdatabase!=null){
response.getOutputStream().write(imgdatabase.getImage());
response.getOutputStream().close();
}
}
@凌驾
公共AbstractFactoryService getAbstractService(){
返回图像服务;
}
@RequestMapping(value=“/createslideshow/{imagemid}”,method=RequestMethod.GET)
公共字符串createslider(@PathVariable(“imagemid”)长图像,模型){
final ImagemSlider img=this.imagemService.getBean(image);
model.addAttribute(“imgslider”,img);
model.addAttribute(“slideshow”,newslideshow());
返回“arquivos/createdisplay”;
}
@RequestMapping(value=“/save”,method=RequestMethod.POST)
公共字符串saveSlideShowr(@RequestParam Long imagemid、@Valid final SlideShow SlideShow、final bindingsresult result、RedirectAttributes redirectAttrs){
ImagemSlider img=this.imagemService.getBean(imagemid);
if(result.hasErrors()){
redirectAttrs.addFlashAttribute(“org.springframework.validation.BindingResult.strategy”,result);
redirectAttrs.addFlashAttribute(“幻灯片放映”,幻灯片放映);
返回“重定向:/arquivosbanco/createslideshow/”+imagemid;
}否则{
this.slideShowService.salva(slideshow);
如果(img!=null){
幻灯片放映。设置图像滑动器(img);
this.slideShowService.salva(slideshow);
}
}
返回这个.getUrlinial();
}
}
克里亚科幻灯片
克里亚科幻灯片放映
Codigo 5
诺姆5
提特罗校长
Sub titulo
萨尔瓦多

在我的控制器正在验证的时候,通常更多的是在视图中没有显示任何东西,我该如何解决


我在stackoverflow上花了很长时间,大多数人都找不到解决方案…

您的视图没有显示任何内容,因为您的模板中没有包含错误消息。下面是一个例子

 <td th:if="${#fields.hasErrors('age')}" th:errors="*{age}">Name Error</td>
名称错误

您的视图没有显示任何内容,因为您的模板中没有包含错误消息。下面是一个例子

 <td th:if="${#fields.hasErrors('age')}" th:errors="*{age}">Name Error</td>
名称错误

查看下面的链接以获取一个工作示例,我试图复制文章中已有的内容,但更多内容无效!!如果我把你提到的,采取昂贵的错误,这应该是很容易做到的,因为jsf和非常简单。。如果你把它放在这里,

名称错误出现错误:bean类[br.com.nextinfo.multimedia.web.model.slideShow]的无效属性'slideShow':Bean属性“slideshow”不可读或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?如果您使用的是Maven项目,能否显示POM.xml文件?请查看以下链接以获取一个工作示例,我试图复制文章中已有的内容,但更多内容无效!!如果我把你提到的,采取昂贵的错误,这应该是很容易做到的,因为jsf和非常简单。。如果将其放在此处

名称错误出现错误错误错误错误:错误:无效属性