[RESOLVIDO] Exibindo valores de atributos de 2 beans em uma única jsp

Boa tarde pessoas,

Estou tentando passar os valores dos atributos de duas classes java numa jsp, que seguem:

[code]package domain;

public class Teste {

private long campoLong;
private int campoInt;

public Teste() {
	
}

public long getCampoLong() {
	return this.campoLong;
}

public int getCampoInt() {
	return this.campoInt;
}

}
[/code]

[code]package domain;

public class Usuario {

private String nome;
private String login;
private String senha;

public Usuario() {
	
}

public void fazerLogin(String login, String senha) {
	this.login = login;
	this.senha = senha;
}

public String getNome() {
	return nome;
}

public String getLogin() {
	return login;
}

public String getSenha() {
	return senha;
}

}[/code]

E a jsp:

[code]<%@ page language=“java” contentType="text/html; charset=ISO-8859-1"
pageEncoding=“ISO-8859-1”%>

Insert title here
USUÁRIO CADASTRADO COM SUCESSO
 
NOME: ${usuario.nome}
LOGIN: ${usuario.login}
SENHA: ${usuario.senha}
CAMPO LONG: ${teste.campoLong}
CAMPO INT: ${teste.campoInt}
[/code]

Porém, quando rodo no servidor - Tomcat - dá a seguinte exception:

[code]Jul 11, 2013 4:47:45 PM org.apache.catalina.core.ApplicationDispatcher invoke
Grave: Servlet.service() for servlet jsp threw exception
javax.el.PropertyNotFoundException: Property ‘nome’ not found on type Teste
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:237)
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:214)
at javax.el.BeanELResolver.property(BeanELResolver.java:325)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:85)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:986)
at org.apache.jsp.sucesso_jsp._jspService(sucesso_jsp.java:80)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at controllers.BaseController.executar(BaseController.java:366)
at controllers.BaseController.service(BaseController.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

INÍCIO: 1373572065151 FIM: 1373572065182 TEMPO DE EXECUÇÃO: 31 mili-segundos
org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property ‘nome’ not found on type Teste
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at controllers.BaseController.executar(BaseController.java:366)
at controllers.BaseController.service(BaseController.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.el.PropertyNotFoundException: Property ‘nome’ not found on type Teste
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:237)
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:214)
at javax.el.BeanELResolver.property(BeanELResolver.java:325)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:85)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:986)
at org.apache.jsp.sucesso_jsp._jspService(sucesso_jsp.java:80)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
… 28 more[/code]

Porque ocorre isso? Não posso passar valores de dois Beans diferentes pra Expression Language buscar os valores?

Grato desde já, abraços!

Na sua classe Teste você não definiu nenhum atributo chamado nome.

Olá Ramon Pires,

Muito obrigado por estar ajudando.

Então, não tem e nem deveria ter. A jsp tá puxando apenas os outros atributos nome, login e senha da classe Usuário e campoLong e campoInt da classe Teste.

Posta o código do seu servlet.

É um rabisco de rascunho de mni framework, está bagunçado porque ainda estou testando muita coisa, então to fazendo pro rumo:

package controllers;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


import org.atatec.trugger.scan.ClassScan;

import com.thoughtworks.paranamer.AdaptiveParanamer;
import com.thoughtworks.paranamer.Paranamer;

import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Controller;
import RequestMapping;

public class BaseController extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	private Set<Class> controllers = ClassScan.findAll().assignableTo(Object.class).in("controllers"); 
	
	public BaseController() {

	}
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		BaseController baseController = new BaseController();
		baseController.executar(request, response);

		
	}
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//System.out.println(request.getMethod());
	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//System.out.println(request.getMethod());
	}
	
	public  void executar(HttpServletRequest request, HttpServletResponse response) {
		
		long inicio = System.currentTimeMillis();
		
		BaseController c = new BaseController(); 
		
		String jsp = null;
		
		boolean isRequestForwardable = false;
		
		List<String> nomesParametrosMetodosController = new ArrayList<>();
		
		/*System.out.println("STRING DE REQUISIÇÃO: " + request.getRequestURI());
		
		if (request.getRequestURI().contains(("{"))) {
			
		}*/
		
		//1
		for (Class<?> controller : c.controllers) {
			//2
			if (controller.isAnnotationPresent(Controller.class)){
				//3
				//percorre os métodos das classes controladoras
				for (Method metodo : controller.getDeclaredMethods()) {
					//4
					// se o método método tem anotação do tipo RequestMapping	
					if (metodo.isAnnotationPresent(RequestMapping.class)) {
						
						
						//System.out.println(metodo.getTypeParameters().getClass().getName());
						//Object[] parametros = metodo.getParameterTypes();
						
						
						//AINDA FALTA PASSAR OS PARAMETROS AADEQUADAMENTE AO INVOCAR O MÉTODO
						
						//5
						//verificando se o método invocado bate com o método HTTP (GET OU POST)
						if (request.getMethod().equalsIgnoreCase(metodo.getAnnotation(RequestMapping.class).method().toString())) {
							//System.out.println("UMA REQUISIÇÃO MAPEADA: " + metodo.getAnnotation(RequestMapping.class).url() + " pelo método HTTP " + metodo.getAnnotation(RequestMapping.class).method());
							
							//6
							//retorna os tipos dos parametros dos métodos das classes controladoras
							Class<?> tiposParametros[] = metodo.getParameterTypes();
							
							//7
							//cria vetor de objetos com indices do tamanho do número de argumentos do método da classe 
							//controladora
							Object classesDosParametrosDoMetodo[] = new Object[tiposParametros.length];				
							
							//8
							//atribui ao Set as classes de dominio, para posterior verificação se cada
							//uma delas foi passada como parametro no método do Controller
							Set<Class> classesDeDominio = ClassScan.findClasses().recursively().in("domain");
							
							//laço passando para o array de objetos uma nova instancia de acordo com o seu tipo
							for (int i = 0; i < tiposParametros.length; i++) {
								//System.out.println("Parametro: " + tiposParametros[i].toString());
								//Class<?> classeDominio[] = new Class[tiposParametros.length];
								//System.out.println("CLASSE: " + tiposParametros[i].getCanonicalName());
								
								
								
								
								
								try {
									//try {
										//alterar aqui o zero pra i
										//classeDominio[0] = Class.forName(tiposParametros[0].getCanonicalName());
										
									/*} catch (ClassNotFoundException e1) {
										// TODO Auto-generated catch block
										e1.printStackTrace();
									}*/
									
									//9
									//AQUI VERIFICAR SE A CLASSE CARREGADA ESTÁ NO PACOTE DOMAIN, PARA VERIFICAR SE 
									//DEVERÁ SER FEITA A INJEÇÃO DE DEPENDÊNCIA NO CONSTRUTOR DO MÉTODO DA CLASSE 
									//CONTROLADORA - OU CRIAR UMA OUTRA FORMA DE VERIFICAÇÃO
									classesDosParametrosDoMetodo[i] = tiposParametros[i].newInstance();
									//pegando os nomes dos inputs - devem ser iguais aos atributos do objeto
									//e passando seus valores para a classe de dominio
									
									//10
									if (metodo.getAnnotation(RequestMapping.class).method().toString().equalsIgnoreCase("POST")) {
										//11
										Enumeration<?> enumeration = request.getParameterNames();
								        //12
										while (enumeration.hasMoreElements()) {
								            String parameterName = (String) enumeration.nextElement();
								            //System.out.println("REQUEST PARAMETER NAME: " + parameterName);
								            try {
								            	//alterar aquio zero para i
								            	
								            	/*Field campo = classeDominio[0].getDeclaredField(parameterName);
												campo.setAccessible(true);
												System.out.println("TIPO DO ATRIBUTO DA CLASSE: " + campo.getType());
												campo.set("nome", "");
												campo.setAccessible(false);*/
								            	
								            	//System.out.println("CLASSE TESTE:" + classes[i].getClass().getCanonicalName());
								            	
								            	//int acertou = 0;
								            	
								            	//13
								            	Pattern pattern = Pattern.compile("\\{([A-Za-z0-9 ]+)\\}");
								            	Matcher matcher = pattern.matcher(metodo.getAnnotation(RequestMapping.class).url());
								            	
								            	List<String> varsRecurso = new ArrayList<>();
								            	
								            	while (matcher.find()) {
								            		varsRecurso.add(matcher.group(1));
								            		System.out.println(matcher.group(1));
								            	}
								            	
								            	for (int j = 0; j < varsRecurso.size(); j++) {
								            		System.out.println("varsRecurso[" + j + "]: " + varsRecurso.get(j));
								            	}
								            	
								            	//14
								            	for (Field campo : classesDosParametrosDoMetodo[i].getClass().getDeclaredFields()) {
								            		
								            		//15
								            		if ((classesDeDominio != null)) {
														
								            			//16
														for (Class<?> domain : classesDeDominio) {
															//System.out.println("CLASSE DO PARAMETRO DO METODO: " + classesDosParametrosDoMetodo[i].getClass().getSimpleName().toString() + ". CLASSE DE DOMINIO: " + domain.getSimpleName().toString());
															//17
															if (domain.getSimpleName().toString().equalsIgnoreCase(classesDosParametrosDoMetodo[i].getClass().getSimpleName().toString())) {
																//System.out.println("CLASSE BATEU: " + domain.getCanonicalName());
															
																Paranamer paranamer = new AdaptiveParanamer();
																
																String[] p = paranamer.lookupParameterNames(metodo, false);
																
																for (int j = 0; j < p.length; j++) {
																	nomesParametrosMetodosController.add(p[i]);
																}
																
																//18
											            		if (campo.getName().equalsIgnoreCase(parameterName)) {
											            			//campo = classes[i].getClass().getDeclaredField(parameterName);
													            	campo.setAccessible(true);
													            	
													            	//acertou++;
													            	
													            	//19
													            	//verificando o tipo do campo, para passar o valor ao objeto
													            	if (campo.getType().toString().equalsIgnoreCase("long")) {
													            		campo.set(classesDosParametrosDoMetodo[i], Long.parseLong(request.getParameter(parameterName)));
													            	} else if (campo.getType().toString().equalsIgnoreCase("int")) {
													            		campo.set(classesDosParametrosDoMetodo[i], Integer.parseInt(request.getParameter(parameterName)));
													            	} else if (campo.getType().getSimpleName().equalsIgnoreCase("String")){
													            		campo.set(classesDosParametrosDoMetodo[i], request.getParameter(parameterName));
													            	}
													            	
													            	//System.out.println("REQUEST PARAMETER VALUE OF PARAMETER OF NAME " + parameterName + ": " + campo.get(classes[i]));
																	campo.setAccessible(false);
													            	
											            		}
															}
														}
														
														
													}
								            		
								            		//System.out.println("NOME DO CAMPO NA CLASSE: " + campo.getName() + ". NOME DO CAMPO NA REQUEST: " + parameterName);
								            		
								            		//System.out.println("NOME CAMPO NA CLASSE: " + campo.getName() + " DO TIPO: " + campo.getType().getSimpleName());
								            		
								            		
								            	}
								            	
								      
								            	//System.out.println("ACERTOU: " + acertou);
								            	
								            	
												
												
												
												
								            } catch (SecurityException e) {
												// TODO Auto-generated catch block
												e.printStackTrace();
											}
								        }
											
									// se não, se o método for anotado como GET	
									} else {
										//13
						            	Pattern pattern = Pattern.compile("\\{([A-Za-z0-9 ]+)\\}");
						            	Matcher matcher = pattern.matcher(metodo.getAnnotation(RequestMapping.class).url());
						            	
						            	//20
										Paranamer paranamer = new AdaptiveParanamer();
										
										String[] p = paranamer.lookupParameterNames(metodo, false);
										
										for (int j = 0; j < p.length; j++) {
											nomesParametrosMetodosController.add(p[i]);
										}
						            	
						            	List<String> varsRecurso = new ArrayList<>();
						            	
						            	int cont = 0;
						            	
						            	//aqui falta apenas pegar o valor armazenado no lugar do {variavel} para jogar no controller
						            	while (matcher.find()) {
						            		varsRecurso.add(matcher.group(1));
						            		System.out.println(varsRecurso.get(cont));
						            		if (varsRecurso.get(cont).equals(nomesParametrosMetodosController.get(i))) {
						            			System.out.println("TIPOS BATEM!");
						            		} else {
						            			System.out.println("TIPOS NÃO BATEM!");
						            		}
						            		cont++;
						            	}
						            	
						            	for (int j = 0; j < varsRecurso.size(); j++) {
						            		System.out.println("varsRecurso[" + j + "]: " + varsRecurso.get(j));
						            	}
									}
								} catch (InstantiationException
										| IllegalAccessException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
								
								//System.out.println(tiposParametros[i].getSimpleName().toLowerCase() + "    " + classesDosParametrosDoMetodo[i]);
								
								
								
								//21
								//DISPONIBILIZANDO OS OBJETOS PARA A VIEW, QUE AS EXIBIRÀ COM EXPRESSION LANGUAGE
								//SÓ FALTA CRIAR A CLASSE MODEL QUE FAZ ISSO
								//FALTA TAMBÉM:
								//O PRIMEIRO PARAMETRO DA CHAMADA ABAIXO - tiposParametros[i].getSimpleName().toLowerCase()
								//RETORNA O NOME DA CLASSE. TENTAR RETORNAR NO NOME DO PARAMETRO USADO
								//NO CONTROLLER
								request.setAttribute(nomesParametrosMetodosController.get(i)/*tiposParametros[i].getSimpleName().toLowerCase()*/, classesDosParametrosDoMetodo[i]);
							}
							
							
							//22
							//verifica se o método da classe controladora retorna o tipo String
							//se assim for, o executa e passa o valor de retorno - o nome da página jsp
							//para o RequestDispatcher
							if (metodo.getReturnType().equals(String.class)) {
								try {
									jsp = metodo.invoke(controller.newInstance(), classesDosParametrosDoMetodo) + ".jsp";
								} catch (IllegalAccessException
										| IllegalArgumentException
										| InvocationTargetException
										| InstantiationException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
								isRequestForwardable = true;
							}
						}
						//System.out.println("RETORNO: " + metodo.invoke(classe.newInstance(), null).toString());
						
						
						/*for (int i = 0; i < metodo.getParameterTypes().length; i++) {
							System.out.println("PARAMETRO: " + parametros[i].getSimpleName());
							
							
						}*/
						
						/*try {
							Usuario usuario = (Usuario)Class.forName("Usuario").newInstance();
						} catch (InstantiationException e) {
							e.printStackTrace();
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						} catch (ClassNotFoundException e) {
							e.printStackTrace();
						}*/
						
						
						/*
						//terminar de alterar os valores do objeto usuario aqui
						Class<?> classeUsuario = Usuario.class;
						for (Field atributo : classeUsuario.getDeclaredFields()) {
							if (atributo.getName().equalsIgnoreCase("nome")) {
								atributo.setAccessible(true);
								//atributo.set
								atributo.setAccessible(false);
							}
						}*/
					
					// se o método método não tem anotação do tipo RequestMapping	
					} else {
						
					}
				}
				
			}
			
		}



		if (isRequestForwardable == true) {
			RequestDispatcher rd = request.getRequestDispatcher(jsp);
			try {
				rd.forward(request, response);
			} catch (ServletException | IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		long fim = System.currentTimeMillis();
		
		long tempoDeExecução = fim - inicio;
		
		System.out.println("INÍCIO: " + inicio + " FIM: " + fim + " TEMPO DE EXECUÇÃO: " + tempoDeExecução + " mili-segundos");
		
	}
	
	
	
}

E o real controller:

package ontrollers;

import Controller;
import RequestMapping;
import RequestMethod;
import Teste;
import Usuario;

@Controller
public class UsuarioController {
	
	@RequestMapping(url = "cadastro-usuario/{usuario.departamento.id}/{usuario.id}", method = RequestMethod.GET)
	public String carregarPaginaDeCadastroUsuario(Usuario usuario, Teste teste) {
		return "cadastro-usuario-post";
	}
	
	@RequestMapping(url = "cadastro-usuario/", method = RequestMethod.POST)
	public String cadastrarUsuario(Usuario usuario, Teste teste/*, String test*/) {
		
		//test = "TESTANDO A VARIAVEL STRING NO PARAMETRO DO CONTROLLER";
		
		System.out.println("VALOR DO CAMPO NOME DO USUARIO NA CLASSE CONTROLADORA: " + usuario.getNome());
		System.out.println("VALOR DO CAMPO LOGIN DO USUARIO NA CLASSE CONTROLADORA: " + usuario.getLogin());
		System.out.println("VALOR DO CAMPO SENHA DO USUARIO NA CLASSE CONTROLADORA: " + usuario.getSenha());
		System.out.println("VALOR DO CAMPO CAMPOLONG DA CLASSE TESTE NA CLASSE CONTROLADORA: " + teste.getCampoLong());
		System.out.println("VALOR DO CAMPO CAMPOINT DA CLASSE TESTE NA CLASSE CONTROLADORA: " + teste.getCampoInt());
		//System.out.println("VALOR DO PARAMETRO test DO TIPO STRING PASSADO NO MÉTODO DO CONTROLLER: " + test);
		
		return "sucesso";
	}

}

Desculpe a bagunça no código e comentários.
Estranho que tava funcionando até quinta feira passada, dai fiz uma alterações na sexta, fiquei longe disso no feriado prolongado aqui no estado de São Paulo, e testando ontem começou a dar esse erro. Qualquer dúvida é só falar, abração!

Olha,na sua situação só debugando, mas dá uma olhada dentro desse laço: " for (Field campo : classesDosParametrosDoMetodo[i].getClass().getDeclaredFields()) " , tenta olhar cada valor que a variavel campo está recebendo e se ele é compatível com a classe esperada. Pelo que parece essa instanciação não está sendo feita do modo correto.
Mas pelo queeu vi vc tá querendo fazer algo como Spring MVC(por causa das anotações) , ai eu já te digo se for realmente para aprendizado tá beleza,mas se for para algum produto seu ou na empresa que vc trabalha(que pelo que eu vi no seu stacktrace deve ser algo relacionado ao governo " br.gov.sp.mococa.") , logo não tente reinventar a roda pois exitem N frameworks Web que vc pode usar e que em sua maioria são open source,como o vraptor.

É, vou ter que debugar mesmo.

Enton, esse framework é projeto futuro, pelo seguinte motivo: eu uso o Spring MVC mesmo, ms andei lendo sobre “objetos anemicos”, ou seja, aqueles que precisam de getters e setters para todos os atributos - devido ao framework necessitar deles pra fazer a injeção de dependências. O que estou fazendo é um framework com as mesmas funcionalidades do Spring MVC - ao menos nas principais características - mas fazendo a injeção de dependências sem o uso dos métodos setters - tornando os campos das classes acessíveis para atribuir os valores a eles. Deu pra sacar? Mas claro que isso nem um rascunho é, estou apenas tentando ver se com o meu conhecimento atual em java consigo fazer essas funcionalidades primeiro, pra depois modelar o framewrok de maneira correta.

Qualquer sugestão seria bem vinda.

Abração, e muito obrigado pelo tempo que gastou em ler tudo isso, ainda mais essa gambiarreira toda.

Ah, o VRaptor tmb faz injeção de dependência por setters - nunca usei ele mas li a documentção. Até pensei em baixar os fontes dele e alterar, mas na maioria das vezes isso é uma trabalheira e tanto. Enton resolvi começar esse pequeno projeto, que ainda tá na estaca zero, mas espero em 10 meses ter ele pronto e testado - mexo nele apenas a noite - e claro, será open source.

Abração.

O estranho é que quando tiro o segundo parametro da classe UsuarioController no método que mapeia o POST - do tipo Teste - e tiro as EL referente a Teste na jsp, funfa direitinho. Tô achando que tô errando em algo com com Expression Language mesmo.

Debugando manualmente - usando System.out.println() - descobri o erro, e deu vontade de cometer suicídio:

linha 197 da classe BaseController:

for (int j = 0; j < p.length; j++) { nomesParametrosMetodosController.add(p[i]); }

Troquei por descuido o j pelo i, ou seja, tava tentando acessar sempre o primeiro objeto - Usuario - tentando acessar a propriedade ‘nome’, só que na realidade estava com a classe Teste aberta. Alguém me dá um tiro, foram 3 dias nisso!

Muito obrigado pela ajuda, um abraço a todos!