skyscreamer / yoga

Yoga is RESTful but flexible.
http://yoga.skyscreamer.org/
Apache License 2.0
156 stars 66 forks source link

POST Support #232

Open cepage opened 10 years ago

cepage commented 10 years ago

From Eric Meltzer:

When using method POST, org.skyscreamer.yoga.springmvc.view.YogaSpringView renders org.springframework.validation.BindingResult instead of object returned from controller. It looks like the order of the objects in the Model are different for POST.

// I’m doing something like this

@RequestMapping(value = "/test", method = RequestMethod.POST) public List test() { return domainObjectDao.findAll(); }

original render method

@Override
public void render( Map<String, ?> model, HttpServletRequest request, HttpServletResponse response )
        throws Exception
{
    response.setContentType( getContentType() );
    yogaView.render( request, response, model.isEmpty() ? null : model.values().iterator().next(), response.getOutputStream() );
}

updated render method

@Override
public void render( Map<String, ?> model, HttpServletRequest request, HttpServletResponse response )
        throws Exception
{
    response.setContentType( getContentType() );
    Object value=null;
    if(!model.isEmpty()){
        Iterator valueIterator =  model.values().iterator();

        while(valueIterator.hasNext()){
            value = valueIterator.next();
            // when posting the BindingResult comes first
            if( !(value instanceof org.springframework.validation.BindingResult) ){
                yogaView.render( request, response,  value , response.getOutputStream() );
                return;
            }
        }
    }
    yogaView.render( request, response,  null , response.getOutputStream() );
}