Boa tarde pessoal,
vou passar uma desafio para vcs, e consequentemente resolver o meu problema, hehehe
Olha soh, tenho um formulario em uma modal, e nesse formulario, existem campos e um picklist
Passo 1. Quando clico na listagem e abre a modal, com o formulario preenchido e a picklist coms os registros corretos em cada lado
Passo 2. Quando abro o formulario para inserir, que é o mesmo da modal que visualizo, so que vazio e clico no botao salvar ele faz as validações dos campos not null, isso tudo esta 100%
Mas quando volto ao passo 1, o picklist nao esta preenchido corretamente, como no passo 1 estava.
Abaixo e anexo, segue o codigo das classe e telas, caso necessario me peçam mais informações
Converter
@SuppressWarnings("unchecked")
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
Class<?> clazz = null;
GenericFacade facade = null;
InitialContext iniCtx;
try {
iniCtx = new InitialContext();
facade = (GenericFacade) iniCtx.lookup("java:module/GenericService");
} catch (NamingException e) {
// TODO ver como controlar a exception
e.printStackTrace();
}
if (component instanceof PickList) {
PickList pickList = (PickList) component;
// String[][] submittedValues = (String[][])pickList.getSubmittedValue();
Object dualList = pickList.getValue();
DualListModel<AbstractEntity> dl = (DualListModel<AbstractEntity>) dualList;
for (Object o : dl.getSource()) {
clazz = o.getClass();
}
for (Object o : dl.getTarget()) {
clazz = o.getClass();
}
}
facade.setEntityClass(clazz);
Object annotationFieldValue = ReflectionUtil.getAnnotationValue(
clazz, Selecionavel.class, "field");
if (annotationFieldValue == null) {
return null;
}
//Busca o nome do campo que é visualizado no combo
String fieldName = annotationFieldValue.toString();
AbstractEntity entity = facade.findUniqueByField(fieldName, value);
return entity;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null) {
return "";
}
if (value instanceof String) {
return (String) value;
}
if (value != null && !(value instanceof AbstractEntity)) {
throw new IllegalArgumentException(
"This converter only handles instances of AbstractEntity");
}
String fieldName = ReflectionUtil.getAnnotationValue(
Hibernate.getClass(value), Selecionavel.class, "field").toString();
String result = (String) ReflectionUtil.getFieldValue(value, fieldName);
return result;
}[/code]
[code]
public abstract class BasicCrudController<T extends AbstractEntity<ID>,
F extends AbstractSearchEntity,
S extends BasicCrudFacade<T, F, ID>,
ID extends Serializable> extends BasicIncludeController<T, S, ID>
implements Serializable {
......
public void viewSearchPart(ActionEvent e) {
initialStateSearch();
}
[/code]
[code]@ManagedBean
@ViewScoped
public class UsuarioController extends
TrilhaAuditoriaCrudController<Usuario, UsuarioSearch, UsuarioLocalFacade, Integer> implements Serializable {
@Override
protected void initialStateForm() { // limpa o formulário da modal
inicializaPickList();
this.setUsuario(new Usuario());
this.setConfirmarEmail("");
this.setConfirmarSenha("");
}
private void inicializaPickList() {
this.setEmpresas(new DualListModel<Empresa>(this.getEmpresaService().listAll(), new ArrayList<Empresa>()));
this.setPerfis(new DualListModel<Perfil>(this.getPerfilService().listAll(), new ArrayList<Perfil>()));
}
@Override
public void selectItem() { // quando um registro é marcado para alteração no
// grid
super.selectItem();
if (this.getUsuario().getId() == null || this.getUsuario().getId() == 0) {
this.setConfirmarEmail("");
this.setConfirmarSenha("");
} else {
this.setConfirmarEmail(this.getUsuario().getEmailUsuario());
this.setConfirmarSenha(this.getUsuario().getSenhaUsuario());
}
preencheListEmpresas();
// onChangeRow();
}
private void preencheListEmpresas() {
inicializaPickList();
List<Empresa> listEmpresas = new ArrayList<Empresa>();
for (UsuarioEmpresa usuarioEmpresa : this.getBean().getUsuariosEmpresas()) {
listEmpresas.add(usuarioEmpresa.getEmpresa());
// removeEmpresaDaLista(usuarioEmpresa);
}
this.getEmpresas().getSource().removeAll(listEmpresas);
this.getEmpresas().getTarget().addAll(listEmpresas);
if (!listEmpresas.isEmpty()) {
this.empresaSelected = listEmpresas.get(0);
}
// this.empresas.setTarget(listEmpresas);
}
......