List<List<String>> no VRAPTOR

3 respostas
salmaox

Bom dia,

Estou tentando imprimir uma lista de uma lista como se fosse um array bidimensional pra depois passar pra view. Os campos HTML chegam pra mim desta forma.
<input id="hloc_2" type="hidden" name="mun[3069][2]" value="2" class="cmun_3069">
<input id="hloc_4" type="hidden" name="mun[3069][4]" value="4" class="cmun_3069">
<input id="hloc_7" type="hidden" name="mun[3058][7]" value="7" class="cmun_3058">

Onde: mun[idMunicipio][idLocalidade]

Controller

@Post
	@Path("/visualiza")
	public void visualiza(Municipio municipio, String vigencia, String versao, List<List<String>> mun) {

		/* Header do Alerta */
		this.result.include("idalerta", dao.retornaSequenceAlerta());
		this.result.include("versao", versao);
		this.result.include("data", fd.getdatahora());
		this.result.include("vigencia", vigencia);
		this.result.include("uf", municipio.getUf());
		/* FIM do Header do Alerta */

		/* Municipios por localidade */
		
		if (!mun.isEmpty()) {
			for (List<String> l : mun) {
				for(String s : l){
					System.out.println("Municipio X Localidade: "+ s);
				}
			}
		}
}

Ele dá o seguinte erro quando tento imprimir a lista

java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl cannot be cast to java.lang.Class

br.com.caelum.vraptor.http.ognl.ListNullHandler.instantiate(ListNullHandler.java:47)

br.com.caelum.vraptor.http.ognl.ReflectionBasedNullHandler.nullPropertyValue(ReflectionBasedNullHandler.java:55)

ognl.ASTProperty.getValueBody(ASTProperty.java:118)

ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)

ognl.SimpleNode.getValue(SimpleNode.java:236)

ognl.ASTChain.setValueBody(ASTChain.java:222)

ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)

ognl.SimpleNode.setValue(SimpleNode.java:279)

ognl.Ognl.setValue(Ognl.java:737)

ognl.Ognl.setValue(Ognl.java:783)

br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.setProperty(OgnlParametersProvider.java:157)

br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createParameter(OgnlParametersProvider.java:144)

br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:96)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:107)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:79)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

Muito Obrigado

3 Respostas

Lucas_Cavalcanti

eh… infelizmente o vraptor não tenta brincar com tipos genéricos recursivos…

crie uma classe encapsulando isso, ou use um String[][]

salmaox

Lucas,

Eu tentei usar
public void visualiza(Municipio municipio, String vigencia, String versao, String [][] mun) {

Mas ele não compila

Grave: Exception starting filter vraptor

java.lang.IllegalStateException: Paranamer were not able to find your parameter names for public void br.gov.cemaden.controller.AlertaController.visualiza(br.gov.cemaden.bean.Municipio,java.lang.String,java.lang.String,java.lang.String[][])You must compile your code with debug information (javac -g) or register another name provider. Try to use br.com.caelum.vraptor.http.DefaultParameterNameProvider instead.

at br.com.caelum.vraptor.http.ParanamerNameProvider.parameterNamesFor(ParanamerNameProvider.java:60)

at br.com.caelum.vraptor.http.route.DefaultTypeFinder.getParameterTypes(DefaultTypeFinder.java:41)

at br.com.caelum.vraptor.http.route.DefaultRouteBuilder.addParametersInfo(DefaultRouteBuilder.java:194)

at <a href="http://br.com.caelum.vraptor.http.route.DefaultRouteBuilder.is">br.com.caelum.vraptor.http.route.DefaultRouteBuilder.is</a>(DefaultRouteBuilder.java:182)

at br.com.caelum.vraptor.http.route.PathAnnotationRoutesParser.registerRulesFor(PathAnnotationRoutesParser.java:89)

at br.com.caelum.vraptor.http.route.PathAnnotationRoutesParser.rulesFor(PathAnnotationRoutesParser.java:67)

at br.com.caelum.vraptor.ioc.ResourceHandler.handle(ResourceHandler.java:48)

at br.com.caelum.vraptor.ioc.spring.StereotypedBeansRegistrar.handleRefresh(StereotypedBeansRegistrar.java:59)

at br.com.caelum.vraptor.ioc.spring.StereotypedBeansRegistrar.onApplicationEvent(StereotypedBeansRegistrar.java:46)

at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97)

at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:303)

at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:911)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:428)

at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.start(SpringBasedContainer.java:106)

at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:87)

at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:110)

at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:103)

at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)

at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)

at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:115)

at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072)

at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726)

at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3461)

at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426)

at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1361)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1653)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1662)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1662)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1642)

at java.lang.Thread.run(Thread.java:722)
Lucas_Cavalcanti

tenta criar uma classezinha então:

[code]
class Localidade {
private List locals;
//get/Set
}
[code]

e receba uma List no método... só precisa mudar um pouquinho os inputs pra ficar:

mun[xx].locals[yy]

Criado 10 de abril de 2012
Ultima resposta 10 de abr. de 2012
Respostas 3
Participantes 2