Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Neither Binding nor plain target object for Bean name... available as request attribute

Bom dia!

Após a conclusão do curso de Spring (I e II) pus em prática as lições e comecei a desenvolver uma aplicação simples baseada no treinamento mas me deparei com um erro e não consigo enxergar o porquê do mesmo, a mensagem de erro está dizendo que o Objeto da classe não está disponível como atributo da requisição, o famoso "Neither Binding nor plain target object for Bean name... available as request attribute", o estranho é que já coloquei o objeto na assinatura do método e corrigi as chamadas do form, mas mesmo assim o erro persiste... Se alguém puder me mostrar aonde está o erro, serei muito grato!

Ah, no caso, meu objeto é o OS (em vez de Produto, no curso)

Obrigado!

@Controller @RequestMapping("/oss") public class OsController {

@Autowired
private OsDao dao;

@RequestMapping("/form")
public ModelAndView form(OS os) {
        ModelAndView modelAndView=new ModelAndView("/oss/form");
    return modelAndView;
}

@RequestMapping(method = RequestMethod.POST)
public ModelAndView gravar(@Valid OS os, BindingResult result, RedirectAttributes redirectAttributes) {

    if(result.hasErrors()) {
        System.out.println("Form vazio!, retornando ao form");
        System.out.println("OC - grava  - os :"+os.toString());
        return form(os);
    }
    if(os.getDataAbertura()==null) {
        os.setDataAbertura(LocalDate.now());
    }
    dao.gravar(os);
    redirectAttributes.addFlashAttribute("resultado", "Ordem de serviço aberta com sucesso!");
    return new ModelAndView("redirect:oss"); //para evitar ressubmissão    //osAbertas();
}

meu form.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Formulário de abertura de ordens de serviço</title>
</head>
<body>
    <form:form action="${s:mvcUrl('OC#gravar').build() }" method="post" commandName="os">
        <div>
            <label>Categoria</label>
            <form:select path="categoria">
                <form:option value="MANUTENÇÂO">MANUTENÇÂO</form:option> 
                <form:option value="SUPRIMENTO">SUPRIMENTO</form:option>
                <form:option value="SERVIÇOS">SERVIÇOS</form:option>
            </form:select>
        </div>
        <div>
            <label>Solicitação</label>
            <form:textarea path="solicitacao" rows="10" cols="50"/>
            <form:errors path="solicitacao"/>        
        </div>
        <div>
            <button type="submit">Gerar</button>
        </div>
    </form:form>
</body>
</html>
2 respostas

Você está passando o objeto 'os' antes de ir para form.jsp?

solução!

Oi Otávio! Obrigado pelo retorno!

Então cara, fui seguindo o exemplo e nele não era necessário colocar bodelo Produto (no meu caso seria OS). Nele, somente o objeto TipoPreco era colocado no addObject, por isso não achei que fosse necessário. Mas adicionei o meu OS no addObject do método form e funcionou, obrigado!

Estou tendo dificuldades para entender como adicionar novos registros num campo que é uma lista desse mesmo objeto, se não conseguir vou abrir outro tópico!

Mais uma vez, obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software