(Vraptor-Extjs4) Operaçao com varios registros

Bom tenho um projeto com um crud usando Vraptor3.5 e Extjs 4.2.
Controller Vraptor

@Resource public class UsersController { private final Result result; private final UserDao dao; public UsersController(UserDao dao, Result result) { this.result = result; this.dao = dao; } @Get public void list(Integer start, Integer limit) { try { result.use(ExtJSJson.class).from(dao.list(start, limit)) .total(new Long(dao.rowsCount().toString()).intValue()) .success().serialize(); } @Post @Consumes("application/json") public void save(User data) { dao.save(data); result.use(ExtJSJson.class).from(data).success().serialize(); } @Put @Consumes("application/json") public void update(User data) { dao.update(data); result.use(ExtJSJson.class).from(data).success().serialize(); } @Delete @Consumes("application/json") public void delete(User data) { dao.delete(data); result.use(ExtJSJson.class).from(data).success().serialize(); } }
Store Extjs

Ext.define('AM.store.Users', { extend : 'Ext.data.Store', model : 'AM.model.User', autoLoad: {start: 1, limit: 20}, pageSize : 20, // autoSync: true, proxy : { type : 'ajax', api : { read : 'users/list', create : 'users/save', update : 'users/update', destroy : 'users/delete' }, actionMethods: { read: 'get', create : 'post', update : 'put', destroy : 'delete' }, reader : { type : 'json', root : 'data', successProperty : 'success', totalProperty : 'total' }, writer : { type : 'json', root : 'data', writeAllFields : true, encode : false } } });
Usei o projeto da Loiane pelo JavaCE 2012 como exemplo, https://github.com/loiane/javace-conference-2012
até aí tudo bem consegui fazer o crud funcionar.
Minha dúvida, é possível implementar um método que receberia uma lista de ‘User’,
para por exemplo excluir varios registros em uma unica operação?
Quando tento usar o metodo delete existente, o json que enviado pro servidor tem o seguinte padrão, e acaba excluindo somente o ultimo registro:

{"data": [ {"id":184,"name":"asdas","email":"as@ema.vom"}, {"id":180,"name":"teste","email":"teste@email.com"}, {"id":173,"name":"User","email":"user4@u.com"} ] }

receber uma lista como json, sem um objeto como wrapper não vai rolar…

tente criar uma classe que tem uma lista de usuarios, e receber esse cara no json.

Valeu…

[code]public class Wrapper {

   private List<User> users;

}[/code]
Ficou assim, mas quando recebo o objeto, ele esta nulo.

como vc tá passando e como vc tá recebendo o objeto no controller?

Selecionando varios registros na grid do Ext ele manda o json assim:

O metodo do controller:

@Delete @Consumes("application/json") public void delete(Wrapper data) { List<User> users = data.getUsers(); for (User user : users) { userDao.delete(user); } result.use(ExtJSJson.class).from(users).success().serialize(); }
o trace exibe:

com.thoughtworks.xstream.converters.ConversionException: null : null ---- Debugging information ---- cause-exception : java.lang.NullPointerException cause-message : null class : br.app.gestor.util.Wrapper required-type : br.app.gestor.util.Wrapper line number : -1 -------------------------------

A exception acontece:

[code]@Deserializes({“application/json”,“json”})
public class JsonDeserializer implements Deserializer{

   public Object[] deserialize(InputStream inputStream, ResourceMethod method) {
	Method javaMethod = method.getMethod();
	Class<?>[] types = javaMethod.getParameterTypes();
	checkArgument(types.length > 0, 
			"Methods that consumes representations must receive just one argument: the root element");
	
	XStream xStream = getConfiguredXStream(javaMethod, types);

	Object[] params = new Object[types.length];

	chooseParam(types, params, xStream.fromXML(inputStream)); //xStream.fromXML(inputStream) lança Exception: Caused by: javax.xml.stream.XMLStreamException:   
                                                                                                        //org.codehaus.jettison.json.JSONException: A JSONObject text must begin with '{' at character 0 of
	return params;
}

}[/code]

de acordo com o erro ele tá falando que o json deveria começar com {… dá uma olhada se tá chegando esse json que vc falou mesmo.