Duvida sobre um método para persisitir JSF

5 respostas
primefacesjava
D

Estou com um formulário que possui 3 campos: nome,telefone_fixo,telefone_celular. para salvar, é preciso inserir pelo menos um telefone, só que caso eu não coloque ele salva.

@Transacional
public void gravar() {
	if (this.cliente.getId() == null) {
		if (this.cliente.getTelefone_celular() == null && this.cliente.getTelefone_fixo() == null) {
			MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_WARN,
					"Cliente precisa de algum telefone para contato.");
			if(this.cliente.getNome().trim() != null ) {
				this.dao.adiciona(this.cliente);
			}
		}
		MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_INFO, "Cliente salvo com sucesso!!!");
	} else {
		this.dao.atualiza(this.cliente);
	}
	this.cliente = new Cliente();
}

5 Respostas

A

Tem um problema na sua lógica, desta forma como você fez mesmo que os dois telefones estejam nulos abaixo tem um if que ira fazer a inserção do objeto, se eu entendi bem o que deseja, que é, não inserir o objeto cliente quando os dois telefones estiverem nulos precisa alterar a lógica, lembra que talvez além de nulos eles possam estar vazios, ex:

@Transacional
public void gravar() {
	if (this.cliente.getId() == null) {
		if (this.cliente.getTelefone_celular() == null && this.cliente.getTelefone_fixo() == null) {
			MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_WARN,
					"Cliente precisa de algum telefone para contato.");
		} else {
			if(this.cliente.getNome().trim() != null ) {
				this.dao.adiciona(this.cliente);
                		MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_INFO, "Cliente salvo com sucesso!!!");
			} else {
			MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_WARN,
					"Informe o nome do cliente.");
                        }
                }
	} else {
		this.dao.atualiza(this.cliente);
	}
	this.cliente = new Cliente();
}

Sendo sincero, vejo que muitos expõe seus daos diretamente a view, eu não curto muito este modelo, prefiro ter as camadas isoladas, tendo um service entre os repositórios e a view, mas o ponto que quero chegar é que eu não teria essas FacesMessage dentro do meu DAO, eu teria lançodo exceptions nas validações, lembra que também temos o bean validator o que remove muito desses if’s de validação do seu código, fica a dica, abração.

D

hum… valeu pela dica.

Tentei usar Bean validator do Hibernate, e ao colocoar no pow.xml ele está aparecendo vários erros no meu projeto.

<!-- Implementtação do Bean Validation -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-validator</artifactId>
		<version>5.0.1.Final</version>
		<scope>compile</scope>
	</dependency>

	<!-- Nucleo Hibernate -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>4.2.3.Final</version>
		<scope>compile</scope>
	</dependency>.

Problems.
Description Resource Path Location Type
Failed to read artifact descriptor for javax.validation:validation-api:jar:1.1.0.Final

org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for javax.validation:validation-api:jar:1.1.0.Final
	at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:282)
	at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:198)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.resolveCachedArtifactDescriptor(DefaultDependencyCollector.java:535)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.getArtifactDescriptorResult(DefaultDependencyCollector.java:519)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:409)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:363)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.process(DefaultDependencyCollector.java:351)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.doRecurse(DefaultDependencyCollector.java:504)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:458)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:363)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.process(DefaultDependencyCollector.java:351)
	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:254)
	at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:316)
	at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:172)
	at org.apache.maven.project.DefaultProjectBuilder.resolveDependencies(DefaultProjectBuilder.java:215)
	at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:188)
	at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:119)
	at org.eclipse.m2e.core.internal.embedder.MavenImpl.readMavenProject(MavenImpl.java:636)
	at org.eclipse.m2e.core.internal.project.registry.DefaultMavenDependencyResolver.resolveProjectDependencies(DefaultMavenDependencyResolver.java:63)
	at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refreshPhase2(ProjectRegistryManager.java:530)
	at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager$3.call(ProjectRegistryManager.java:492)
	at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager$3.call(ProjectRegistryManager.java:1)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
	at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:496)
	at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:351)
	at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:298)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.getProjectFacade(MavenBuilder.java:154)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:89)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
	at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:487)
	at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:399)
	at org.eclipse.ui.actions.GlobalBuildAction$1.run(GlobalBuildAction.java:177)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Failure to transfer javax.validation:validation-api:pom:1.1.0.Final from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact javax.validation:validation-api:pom:1.1.0.Final from/to central (https://repo.maven.apache.org/maven2): repo.maven.apache.org
	at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:444)
	at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:246)
	at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:223)
	at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:267)
	... 46 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Failure to transfer javax.validation:validation-api:pom:1.1.0.Final from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact javax.validation:validation-api:pom:1.1.0.Final from/to central (https://repo.maven.apache.org/maven2): repo.maven.apache.org
	at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.newException(DefaultUpdateCheckManager.java:238)
	at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.checkArtifact(DefaultUpdateCheckManager.java:206)
	at org.eclipse.aether.internal.impl.DefaultArtifactResolver.gatherDownloads(DefaultArtifactResolver.java:585)
	at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:503)
	at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:421)
	... 49 more
	pom.xml	/servico	line 1	Maven Dependency Problem
JAX-RS (REST Web Services) 2.0 can not be installed : One or more constraints have not been satisfied.	servico		line 1	Maven Java EE Configuration Problem
JAX-RS (REST Web Services) 2.0 requires Java 1.6 or newer.	servico		line 1	Maven Java EE Configuration Problem
Missing artifact antlr:antlr:jar:2.7.7	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact com.fasterxml:classmate:jar:0.8.0	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact com.sun.faces:jsf-api:jar:2.2.14	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact com.sun.faces:jsf-impl:jar:2.2.14	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact dom4j:dom4j:jar:1.6.1	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact javax.validation:validation-api:jar:1.1.0.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact mysql:mysql-connector-java:jar:5.1.34	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.hibernate:hibernate-core:jar:4.2.3.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.hibernate:hibernate-entitymanager:jar:5.1.0.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.hibernate:hibernate-validator:jar:5.0.1.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.javassist:javassist:jar:3.20.0-GA	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.jboss.logging:jboss-logging:jar:3.3.0.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:jar:1.0.1.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.jboss.weld.servlet:weld-servlet:jar:2.3.3.Final	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact org.primefaces:primefaces:jar:6.0	pom.xml	/servico	line 1	Maven Dependency Problem
Missing artifact xml-apis:xml-apis:jar:1.0.b2	pom.xml	/servico	line 1	Maven Dependency Problem
A

Acredito que falte declarar a API, um outro detalhe é dar um mvn update e após um clean install para atualizar la no .m2(repositório local)

veja as dependências, pode usar s últimas versões:

validation-api
hibernate-validator
slf4j-api
slf4j-simple
log4j
D

Conforme sugestão que você falou, comecei a organizar meu código:

criei um pacote: repository " no caso está minha interface, ex: gravar,excluir e etc…
criei um pacote: dao: "no caso implementa minha interface citada anteriormente.
criei um pacote: service: A possuo um método que dentro dele, a minha interface ex: Cliente chama seus métodos com as mensagens ex: ao gravar um objeto mostra uma mensagem.

*no meu pacote: bean: chama o objeto que foi feito no pacote service.

OBS; Acho que dá para entender, qualquer coisa coloco o código para você me da uma sugestão beleza.

A

Tranquilo @Dayson_Rodrigues, assim me parece bem melhor, fica mais claro a responsábilidade de cada parte., abração.

Criado 1 de fevereiro de 2017
Ultima resposta 2 de fev. de 2017
Respostas 5
Participantes 2