Iterar sobre atributos de um objeto

1 resposta
D

Gostaria de saber se há alguma forma de iterar sobre os atributos de um objeto?
Na verdade o que eu gostaria de fazer é o seguinte: tenho uma tela de busca de alunos cadastrados. O usuário pode digitar o nome, o apelido, o turma, todos ao mesmo tempo ou também não preencher nenhum campo para pesquisa. Para cada campo da pesquisa deixado em branco, ele fará então uma busca em todos registros. Caso não digite nenhum campo para pesquisa, isto retornará todos os registros.
O que quero fazer é passar este objeto Aluno para algum método e ele itere sobre os seus atributos para saber se estão preenchidos ou em branco e fazer a devida consulta.

Ex:
O usuário deseja pesquisar apenas pelo nome do aluno: João. A pesquisa retorna todos os alunos de todas as turmas chamado João. Caso ele digitasse além do nome a turma, a consulta seria mais específica, retornando os resultados de aluno João da turma especificada, porém com qualquer apelido. Caso o usuário não digite nada, todos os registros serão retornados. Quero que este código identifique a quantidade de atributos que o objeto tem, sem a necessidade de eu informar isto manualmente.

Gostaria de saber como fazer isso utilizando Struts 2 com Hibernate(usando HQL)?

1 Resposta

wagnerlegiao

Olá, tudo bem?
Não sei se é exatamento o que você precisa, mas você poderia usar recursos de Annotations…dependendo da arquitetura do software que está fazendo… nesse caso a classe Aluno teria os atributos anotados, como segue:

@Obrigatorio
	private String usuario;
	
	@ValidateRange(max=6,min=3)
	@Obrigatorio private String senha;

para isso é necessário declarar uma interface:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @ interface ValidateRange {

	public int max();
	public int min();
	
}

em seguida criaria um método para validar esses atributos, como o exemplo

public void validate(Object o) throws Exception{
		Class classe = o.getClass();
		Field[] fields = classe.getDeclaredFields();
		for(Field f : fields){			
			if(f.isAnnotationPresent(ValidateRange.class)){
				f.setAccessible(true);
				ValidateRange ann =  f.getAnnotation(ValidateRange.class);				
				if(f.get(o).toString().length() > ann.max())
					throw new Exception("Campo "+f.getName()+" deve ser menor do que "+ann.max());
				if(f.get(o).toString().length() < ann.min())
					throw new Exception("Campo "+f.getName()+" deve ser maior do que "+ann.min());
			}
		}
	}
Criado 30 de setembro de 2008
Ultima resposta 30 de set. de 2008
Respostas 1
Participantes 2