BindingResult和bean名称的普通目标对象''都不可用作请求属性

时间:2013-11-19 19:38:30

标签: java spring jsp tomcat spring-mvc

嘿我从Spring开始,但是我发现了这个异常并且无法解决它 这是我的jsp

<div id ="central">
<fieldset id="formregistro">
    <form:form modelAttribute="Canciones" method="POST" action="/insertCan" onSubmit="return validar()">
        <legend>Registre los datos de la nueva canción.</legend>
        <label for="titulo">Título de la canción:</label>
            <form:input type="text" path="tit_can" size="20" id="cajaf"/>
        <label for="artista">Artista:</label>
        <form:select path="nom_art"  id="cajaf" onclick="setArtista(this[selectedIndex].text)" >
            <c:forEach  var="art" items="${artList}">
                <form:option value="{?art.nom_art}"/>
            </c:forEach>
        </form:select>
            <input type="checkbox" name=checkArtista value="si" onClick="mostrarTot()">Otro:  
            <input type="text" path="nArtista" style="visibility:hidden"/>
        <label for="album">Álbum:</label>
        <form:select path="nom_alb" id="cajaf" style="visibility:hidden">
            <c:forEach  var="alb" items="${albList}">
                <form:option value="{?alb.nom_alb}"/>
            </c:forEach>
        </form:select>
        <input type="checkbox" name=checkAlb value="si" onClick="mostrar()">Otro:
            <input type="text" path="nAlbum" style="visibility:hidden"/>                
        <label for="anio">Año:</label>             
            <form:input type="text" path="fec_can"/>
        <input type="submit" value="Enviar"/>
</form:form>
</fieldset>

这是我的控制器

@Resource(name = "CancService")
CancServiceImp canservice;

@RequestMapping(method=RequestMethod.POST)
public String addModel(ModelMap model){
    model.addAttribute("Canciones",new Canciones());
    return("");
}

@RequestMapping("/music")
public ModelAndView music(@ModelAttribute Canciones Canciones){
    try{
    //canservice = new CancServiceImp();
    if(canservice.artIsNull()){
        return new ModelAndView("canciones/index");
    }else if(canservice.albIsNull()){
        List<Artista> ArtList = canservice.getArtistList();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("artList",ArtList);
        return new ModelAndView("canciones/index", "map", map);
    }
    else{
    List<Artista> ArtList = canservice.getArtistList();        
    List<Album> albList = canservice.getAlbumList();

    Map<String, Object> map = new HashMap<String, Object>();
    map.put("artList",ArtList);
    map.put("albList", albList);
    return new ModelAndView("canciones/index", "map", map);
    }
    }catch(NullPointerException npe){
        return new ModelAndView("canciones/index");
    }
}
@RequestMapping("/editCan")  
public ModelAndView editCan(@RequestParam int id_can) { 
    //canservice = new CancServiceImp(); 
    try{
    Canciones can = canservice.getCancion(id_can);
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("cancion",can);
    return new ModelAndView("canciones/music", "map", map);  
    }catch(NullPointerException npe){
        return new ModelAndView("canciones/dmusic");
    }
}

@RequestMapping("searchmusic")
public ModelAndView search(){
    //canservice = new CancServiceImp();
    try{
    if(canservice.artIsNull()){
        return new ModelAndView("canciones/index");
    }else if(canservice.albIsNull()){
        List<Artista> ArtList = canservice.getArtistList();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("artList",ArtList);
        return new ModelAndView("canciones/index", "map", map);
    }else if(canservice.canIsNull()){
        List<Album> AlbList = canservice.getAlbumList();
        List<Artista> ArtList = canservice.getArtistList();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("albList", AlbList);
        map.put("artList",ArtList);
        return new ModelAndView("canciones/dmusic", "map", map);
    }
    else{
        List<Canciones> CanList = canservice.getCanList();
        List<Album> AlbList = canservice.getAlbumList();
        List<Artista> ArtList = canservice.getArtistList();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("albList", AlbList);
        map.put("artList",ArtList);
        map.put("canList", CanList);
        return new ModelAndView("canciones/dmusic", "map", map);
    }
    }catch(NullPointerException e){
        return new ModelAndView("canciones/index");
    }
}

@RequestMapping("/insertCan")  
public String inserData(@ModelAttribute Canciones Canciones, @RequestParam String nAlbum, String nArtista) { 
    //canservice = new CancServiceImp();
    if(nAlbum!=null){
        Canciones.setNom_alb(nAlbum);
    }
    if(nArtista!=null){
        Canciones.setNom_art(nArtista);
    }
    Artista art = new Artista();
    art.setNom_art(Canciones.getNom_art());
    Album alb = new Album();
    alb.setNom_alb(Canciones.getNom_alb());
    if (Canciones != null&&Canciones.getNom_alb()!=null&&Canciones.getNom_art()!=null) {            
        canservice.insertDataTot(
                Canciones,
                alb,
                art);
    }else  if (Canciones.getNom_alb()!=null&&Canciones.getNom_art()!=null) {
        canservice.insertDataAlbum(
                alb,
                art);
    } else  if (Canciones.getNom_art()!=null) {
        canservice.insertDataArtist(art);
    }
    return "redirect:/searchmusic";  
}

@RequestMapping("/deleteCan")  
public String deleteCan(@RequestParam int id_can) {  
    //canservice = new CancServiceImp();
    System.out.println("id = " + id_can);  
    canservice.deleteCan(id_can);  
    return "redirect:/searchmusic";  
} 
@RequestMapping("/deleteAlb")  
public String deleteAlb(@RequestParam int id_alb) {  
    //canservice = new CancServiceImp();
    System.out.println("id = " + id_alb);  
    canservice.deleteAlb(id_alb);  
    return "redirect:/searchmusic";  
}
@RequestMapping("/deleteArt")  
public String deleteArt(@RequestParam String nom_art) {
    //canservice = new CancServiceImp();
    int id_art = canservice.getArtistId(nom_art);
    System.out.println("id_art = " + id_art);  
    canservice.deleteArt(id_art);  
    return "redirect:/searchmusic";  
}
@RequestMapping("/updateCan")  
public String updateCan(@ModelAttribute Canciones Canciones) {
    //canservice = new CancServiceImp();
    if(Canciones!=null&&Canciones.getNom_alb()!=null&&Canciones.getNom_art()!=null){
    canservice.updateCan(
            Canciones,
            canservice.getAlbum(canservice.getAlbId(Canciones.getNom_alb(), Canciones.getNom_art())),
            canservice.getArtista(canservice.getArtistId(Canciones.getNom_art())));}
    else if(Canciones.getNom_alb()!=null&&Canciones.getNom_art()!=null){
        canservice.updateAlb(canservice.getAlbum(canservice.getAlbId(Canciones.getNom_alb(), Canciones.getNom_art())),canservice.getArtista(canservice.getArtistId(Canciones.getNom_art()))); 
    }else if(Canciones.getNom_art()!=null){
        canservice.updateArt( canservice.getArtista(canservice.getArtistId(Canciones.getNom_art())));
    }        
    return "redirect:/searchmusic";   
}     

这是例外

    Estado HTTP 500 -

type Informe de Excepción

mensaje

descripción El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.

excepción

org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /WEB-INF/jsp/canciones/index.jsp en línea 95

92:         



  <form:form modelAttribute="Canciones" method="POST"
     action="/insertCan" onSubmit="return validar()"> 93:            
     <legend>Registre los datos de la nueva canción.</legend> 94:          
     <label for="titulo">Título de la canción:</label> 95:                
     <form:input type="text" path="tit_can" size="20" id="cajaf"/> 96:     
     <label for="artista">Artista:</label> 97:             <form:select
     path="nom_art"  id="cajaf"
     onclick="setArtista(this[selectedIndex].text)" > 98:                
     <c:forEach  var="art" items="${artList}">


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

causa raíz

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'Canciones' available as request attribute
    org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:198)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:164)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:127)
    org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:421)
    org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142)
    org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
    org.apache.jsp.WEB_002dINF.jsp.canciones.index_jsp._jspx_meth_form_005finput_005f0(index_jsp.java:528)
    org.apache.jsp.WEB_002dINF.jsp.canciones.index_jsp._jspService(index_jsp.java:261)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/7.0.22.
Apache Tomcat/7.0.22

1 个答案:

答案 0 :(得分:1)

当发出特定请求时,jsp Canciones中所需的模型属性<form:form modelAttribute="Canciones"似乎不可用。

您可以尝试向控制器添加专用方法,以确保Canciones模型始终可用于每个请求。

@ModelAttribute("Canciones")
public Canciones createModel() {
    return new Canciones();
}