Pergunta

Não consigo obter o ModelAttribute para a segunda solicitação.Minha primeira solicitação é o método initForm() que preparei o objeto Command e sou capaz de exibir o comando em jsp.

Através do initForm() estou preenchendo o comando e aquele comando que desejo no editForm quando farei uma chamada ajax.

Aqui está minha forma de primavera

<form:form method="POST" action="addstudentdetails.htm" commandName="command">
 Ignore what is inside this 

 Name: Shoaib Age:23  <a href="#" onclick="editstudentdetails(1,0)">edit</a>

</form:form>

Minha solicitação ajax:

function editStudentDetails(studentId,index){
       $.ajax(
        {url:"editstudentdetails.htm",
         method:"GET",
         data:{"action":"edit","id":studentId,"index":index},
            success: function(data) {
                   jQuery("#studentDetailsDiv").html(data)
            }

        }

      )
   }

Em editStudentDetails() método eu tenho chamada de método ajax para ir editForm() do controlador.

Aqui está meu controlador:

@Controller

public class StudentDetailsController {

@Autowired
private StudentDetailsDAO studentDetailsDAO;

@RequestMapping(value="/studentdetails.htm",method = RequestMethod.GET)
public String initForm(HttpServletRequest request,ModelMap map){
    String action=request.getParameter("action");
    StudentDetailsCommand command=new StudentDetailsCommand();
    System.out.println("in controller"+action);
    command.setStudents(studentDetailsDAO.findAll());
    map.addAttribute("command", command);

    return "studentdetails";
}

@RequestMapping(value="/editstudentdetails.htm",method = RequestMethod.GET)
public String editForm(ModelMap map,HttpServletRequest request){
  map.addObject("index", request.getParameter("index"));
    StudentDetailsCommand command=(StudentDetailsCommand)map.get("command");
  System.out.println(command);
  System.out.println(command.getStudents());//NullPointerException here.
  map.addObject("command", command);
    return "studentdetails";
 }
}

Até tentei @ModelAttribute("studentDetailsCommand") mas não funcionou.

Sou novo no Spring 3.0 e segui todas as soluções fornecidas aqui, mas nada funcionou.

Foi útil?

Solução

Os atributos do modelo só existem durante o ciclo de vida de um HttpServletRequest.Considere ler minha resposta aqui.

Na tua initForm método, você faz o seguinte

map.addAttribute("command", command);

isso adiciona um atributo chamado command aos atributos do modelo.Este atributo acabará por encontrar o seu caminho para o HttpServletRequest atributos e estar disponível para seu JSP.Aqui

<form:form [...] modelAttribute="studentDetailsCommand" commandName="command">

em primeiro lugar, modelAttribute e commandName têm o mesmo propósito, ou seja.para encontrar um atributo no modelo.Se você remover commandName você receberá uma exceção porque não há nenhum atributo de modelo chamado studentDetailsCommand.Aqui está o seu commandNameo valor de está sobrescrevendo seu modelAttributeo valor.

Quando o contêiner Servlet termina de renderizar seu JSP, o conteúdo renderizado é enviado como o corpo da resposta HTTP.Neste ponto, a solicitação foi atendida e o HttpServletRequest e os atributos do modelo são coletados como lixo.

Quando você envia sua nova solicitação através de AJAX, não há mais nenhum atributo de modelo chamado studentDetailsCommand (na verdade nunca houve).

Considere usar Atributos Flash.

Relacionado:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top