Boa tarde a todos!
Estou desenvolvendo um sistema em Java baseado em fluxo de aprovação!
O relacionamento desse sistema consiste em: um usuários deve ter no mínimo um e no máximo n perfils!
Consegui fazer a persistência de um único perfil, mas quando mudo o campo no meu modelo do usuário para vários perfils, o sistema nem inicializa.
Segue o código para melhor visualização:
############### Modelo Perfil ############package com.model;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public enum Perfil {
ADMINISTRADOR("ADMINISTRADOR", "Administrador"), CADASTRADOR("CADASTRADOR",
"Cadastrador"), RH("RH", "RH"), SUPERINTENDENTE("SUPERINTENDENTE",
"Superintendente"), COORDENADOR("COORDENADOR", "Coordenador"), SUPORTE(
"SUPORTE", "Suporte");
private String id_perfil;
private String tipoPerfil;
private Perfil(String id_perfil, String tipoPerfil) {
this.id_perfil = id_perfil;
this.tipoPerfil = tipoPerfil;
}
public String getId_perfil() {
return id_perfil;
}
public String getTipoPerfil() {
return tipoPerfil;
}
public static Perfil from(final String valor) {
if (valor == null) {
throw new IllegalArgumentException(
"O parametro valor não foi informado!");
}
final StringBuilder msg = new StringBuilder();
msg.append("Cannot parse into an element of StatusPerfilEnum: '")
.append(valor).append("'");
throw new IllegalArgumentException(msg.toString());
}
public static Map<String, Perfil> getMapPerfilTipoValues(){
Map<String, Perfil> mapPessoaTipo = new LinkedHashMap<String, Perfil>();
for(Perfil perfilTipo : Perfil.values()){
mapPessoaTipo.put(perfilTipo.getTipoPerfil(), perfilTipo);
}
return mapPessoaTipo;
}
public static List<Perfil> getPerfils() {
List<Perfil> perfis = new ArrayList<Perfil>();
perfis.add(Perfil.ADMINISTRADOR);
perfis.add(Perfil.CADASTRADOR);
perfis.add(Perfil.COORDENADOR);
perfis.add(Perfil.RH);
perfis.add(Perfil.SUPERINTENDENTE);
perfis.add(Perfil.SUPORTE);
return perfis;
}
}
@OneToMany
@ElementCollection
@Enumerated(EnumType.STRING)
private List<Perfil> perfil;
public List<Perfil> getPerfil() {
return perfil;
}
public void setPerfil(List<Perfil> perfil) {
this.perfil = perfil;
}
package com.managed.bean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;
import com.model.Perfil;
import com.model.User;
import com.service.IUserService;
import com.util.Util;
//@author onlinetechvision.com
@ManagedBean(name = "userMB")
@RequestScoped
public class UserManagedBean implements Serializable {
private static final long serialVersionUID = 1L;
private static final String SUCCESS = "cadUser";
private static final String EDIT = "editUsuer";
public String labelCadastro;
// private static final String ERROR = "error";
private User user;
private SelectItem[] opcaoPerfis;
public List<Perfil> perfils;
public List<Perfil> perfilList = new ArrayList();
public void setPerfils(List<Perfil> perfils) {
this.perfils = perfils;
}
public Perfil[] getPerfils(){
return Perfil.values();
}
public List<Perfil> getPerfilList(){
return Perfil.getPerfils();
}
public void setPerfilList(Perfil[] perfilList) {
}
private Perfil perfil;
// Spring User Service is injected...
@ManagedProperty(value = "#{UserService}")
IUserService userService;
List<User> userList;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String addUser() {
if (this.user.getSenha() == null) {
this.user.setSenha("123456");
}
// se o usuário existir atualiza
if (user.getId() != 0) {
getUserService().updateUser(this.user);
return SUCCESS;
// valida se existe p/adicionar
} else if (!getUserService().isExiteUser(this.user)) {
getUserService().addUser(this.user);
return SUCCESS;
} else {
Util.addMessage("cadastroUsuario.existente");
return null;
}
}
public String deleteUser(User user) {
getUserService().deleteUser(user);
return null;
}
public String updateUser(User user) {
getUserService().updateUser(user);
return SUCCESS;
}
public String editUser(User user) {
this.user = user;
return EDIT;
}
public String getLabelCadastro() {
if (this.user.getId() == 0) {
// return "Cadastrao de Usuário";
return Util.getBundleMessage("cadastroUsuario.label.titulo");
} else {
// return "Alteração de Cadastro";
return Util.getBundleMessage("cadastroUsuario.label.alteraUsuario");
}
}
public UserManagedBean() {
if (this.user == null) {
this.user = new User();
}
String[] stringPerfis = new String[getPerfis().length];
int i =0;
for (Perfil p: getPerfis()) {
stringPerfis[i++] = p.toString();
}
opcaoPerfis = criarOpcoesFiltro(stringPerfis);
}
public SelectItem[] getOpcaoPerfis() {
return opcaoPerfis;
}
public void setOpcaoPerfis(SelectItem[] opcaoPerfis) {
this.opcaoPerfis = opcaoPerfis;
}
public Perfil[] getPerfis() {
return Perfil.values();
}
private SelectItem[] criarOpcoesFiltro(String[] data) {
SelectItem[] opcoes = new SelectItem[data.length ];
//SelectItem[] opcoes = new SelectItem[data.length];
// opcoes[0] = new SelectItem("", "Selecione");
for(int i = 0; i < data.length; i++) {
opcoes[i] = new SelectItem(data[i], data[i]);
}
return opcoes;
}
public Perfil getPerfil() {
return perfil;
}
public void setPerfil(Perfil perfil) {
this.perfil = perfil;
}
public void reset() {
this.user = new User();
}
public List<User> getUserList() {
userList = new ArrayList<User>();
userList.addAll(getUserService().getUsers());
return userList;
}
public IUserService getUserService() {
return userService;
}
public void setUserService(IUserService userService) {
this.userService = userService;
}
}
<h:outputText value="Perfil: " />
<p:selectManyCheckbox value="#{userMB.user.perfil}"
layout="pageDirection">
<f:selectItems value="#{userMB.opcaoPerfis}"/>
</p:selectManyCheckbox>
<h:outputText></h:outputText>
Desde já, agradeço!