Inner Class - JSF

6 respostas
sandro.csimas

E aew galera, será que alguém pode me ajudar ?
Meu problema é o seguinte:

Tenho um bean chamado UsuarioMarcadorController, preciso num a4j:repeat pegar uma lista de uma Inner Class chamada InstituicaoMarcadores, que esta neste Bea
Criei um método que retorna o DataModel com a lista de InstituicaoMarcadores, tudo certo…
O Problema esta no a4j:repeat, quando eu passo o DataModel como value… parece que ele não reconhece a estrutura da Inner Class, os atributos etc…

Alguem já passou por um problema parecido ?

Como deve ser estrutura da inner class?

UsuarioMarcadorController está mapeado no faces-config…

Valeu galera, aguardo respostas!

6 Respostas

G

Os atributos da sua Inner Class estão como private?
Tem os gets e sets como public?
Teria como postar o codigo da jsp e do Bean?

sandro.csimas

Lá vai o código…

[UsuarioMarcadorController]

public class UsuarioMarcadorController extends GenericControler  
{
	private DataModel marcadoresInstituicao;
        ....
        ....

        // Método que cria o datamodel com a lista da inner class (InstituicaoMarcadores)
        public DataModel getMarcadoresInstituicao() {
		if(marcadoresInstituicao == null){
			try{
				String hql = "from EscritorioUsuario eu where eu.usuario.id = " + UtilController.getIdUsuarioLogado();
				BaseFacade facade = new BaseFacade();
				List<BaseValueObject> lista = facade.executeSelectQuery(hql,null);
				if(lista.size() > 0){
					List<InstituicaoMarcadores> result = new ArrayList<InstituicaoMarcadores>();
					for (BaseValueObject obj : lista) {
						EscritorioUsuario esc = (EscritorioUsuario) obj;
						InstituicaoMarcadores instMarcs = new InstituicaoMarcadores();
						instMarcs.setEscritorio(esc.getEscritorio());
										
						String hql2 = "from UsuarioMarcador um where um.usuario.id = " + esc.getEscritorio().getId();
						List<BaseValueObject> lista2 = facade.executeSelectQuery(hql2, null);
						for (BaseValueObject obj2 : lista2) {
							instMarcs.getMarcadores().add((UsuarioMarcador)obj2);
						}
						
						result.add(instMarcs);
					}
					marcadoresInstituicao = new ListDataModel(result);
				}
				else{
					marcadoresInstituicao = new ListDataModel(new ArrayList<InstituicaoMarcadores>());
				}
			}
			catch (Exception e) {
				e.printStackTrace();
			}
		}
		return marcadoresInstituicao;
	}

        // Inner Class
	class InstituicaoMarcadores{
		private List<UsuarioMarcador> marcadores = new ArrayList<UsuarioMarcador>();
		private Escritorio escritorio;

		public void setMarcadores(List<UsuarioMarcador> marcadores) {
			this.marcadores = marcadores;
		}

		public List<UsuarioMarcador> getMarcadores() {
			return marcadores;
		}

		public Escritorio getEscritorio() {
			return escritorio;
		}

		public void setEscritorio(Escritorio escritorio) {
			this.escritorio = escritorio;
		}		
	}
}

// JSP

<a4j:repeat id="marcadorinstituicao" value="#{usuarioMarcadorController.marcadoresInstituicao}" var="item" rowKeyVar="row">
 	           <a4j:outPanel id="row" layout="block" style="float: left;">
		            	<h:outputText value="#{item.escritorio.nomeExibicao}"/>
	           </a4j:outputPanel>
	</a4j:repeat>

// ERRO

Caused by: org.apache.jasper.el.JspPropertyNotFoundException: /home/documentos/documentos.jsp(157,7) '#{item.escritorio.nomeExibicao}' Property 'escritorio' not readable on type br.com.jusbrasil.redesocial.entity.Escritorio

o atributo escritorio está na inner class
o a4j:repeat referencia o datamodel que contem a lista da inner class, atribuida à “item”

queria saber o pq deste erro …
um abraço

valeu!

sandro.csimas

readable on type br.com.jusbrasil.redesocial.entity.Escritorio
Quando eu coloco um atributo inexistente aparece este erro, porém com a inner class
oO

G

voce já tentou declarar a inner class como publica

public class InstituicaoMarcadores{...}
sandro.csimas

Ave Maria era isso, falta de atenção minha …
Brigadão man, me salvou

G

hauahuah
acontece :smiley:

Criado 20 de julho de 2010
Ultima resposta 20 de jul. de 2010
Respostas 6
Participantes 2