Bom dia pessoal. Estou a 2 dias com um problema de front-end e as soluções que encontrei internet a fora não resolveu meu problema. Este é o motivo da existência do tópico.
Seguinte, tenho uma dateTable que lista minhas propriedades, no final de cada linha tenho o botão para alterar. Quando clico no botão é exibida uma página com um formulário para alteração, este formulario ja vem com os campos preenchidos com execeção de um campo, o drop-down (selectOneMenu) que mostra a cidade onde a propriedade está situada. Existe outro drop-down que mostra o estado, e este vem preenchido corretamente… usei a mesma lógica para o drop-down da cidade mas não obtive sucesso.
Alguém pode dar uma luz ?? vou colocar os codes aqui.
Pagina de Alteração(alterar.xhtml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui" template="../main.xhtml">
<ui:define name="content">
<h:form>
<!--Alteração de propriedade -->
<p:panelGrid columns="2" columnClasses="ui-grid-col-0, ui-grid-col-1" layout="grid" styleClass="ui-panelgrid-blank">
<p:outputLabel value="Estado: " />
<p:selectOneMenu id="estado" value="#{propriedadeController.estado}" style="width: 200px;" converter="estadoConverter"
required="true" requiredMessage="Preenchimento do estado e da cidade obrigatórios">
<f:selectItem itemLabel="Selecione" />
<f:selectItems value="#{propriedadeController.estados}" var="e" itemValue="#{e}" itemLabel="#{e.sigla}" />
<p:ajax update="cidade" event="change" listener="#{propriedadeController.getCidadeList}"/>
</p:selectOneMenu>
<p:outputLabel value="Cidade: " />
<p:selectOneMenu id="cidade" style="width: 200px;" value="#{propriedadeController.cidade}" converter="cidadeConverter">
<f:selectItem itemLabel="Selecione" />
<f:selectItems value="#{propriedadeController.cidades}" var="c" itemValue="#{c}" itemLabel="#{c.nome}" />
</p:selectOneMenu>
<p:outputLabel value=""/>
<p:outputLabel value="Dados de cobrança: "/>
<p:outputLabel value=""/>
<p:outputLabel value="Estado: " />
<p:selectOneMenu id="estadoCobranca" style="width: 200px;" value="#{propriedadeController.estadoCobranca}" converter="estadoConverter">
<f:selectItem itemLabel="Selecione" />
<f:selectItems value="#{propriedadeController.estados}" var="e" itemValue="#{e}" itemLabel="#{e.sigla}" />
<p:ajax update="cidadeCobranca" event="change" listener="#{propriedadeController.getCidadeCobrancaList}"/>
</p:selectOneMenu>
<p:outputLabel value="Cidade: " />
<p:selectOneMenu id="cidadeCobranca" style="width: 200px" value="#{propriedadeController.cidadeCobranca}" converter="cidadeConverter">
<f:selectItem itemLabel="Selecione" />
<f:selectItems value="#{propriedadeController.cidadesCobranca}" var="c" itemValue="#{c}" itemLabel="#{c.nome}" />
</p:selectOneMenu>
<p:outputLabel value="Logadouro "/>
<p:inputText value="#{propriedadeController.propriedade.endCobranca}" maxlength="75"/>
<p:outputLabel value="Numero: "/>
<p:inputText value="#{propriedadeController.propriedade.endCobrancaNumero}" maxlength="6" />
<p:outputLabel value="Bairro: "/>
<p:inputText value="#{propriedadeController.propriedade.endCobrancaBairro}" maxlength="45"/>
<p:outputLabel value="Cep: "/>
<p:inputMask mask="99999-999" value="#{propriedadeController.propriedade.cepCobranca}"/>
<p:outputLabel value=""/>
<p:outputLabel value=""/>
<h:commandButton value="Salvar Alteração" action="#{propriedadeController.atualizarPropriedade()}"/>
</p:panelGrid>
</h:form>
</ui:define>
</ui:composition>
Aqui vem meu ManagedBean:
@ManagedBean
@SessionScoped
public class PropriedadeController implements Serializable {
private final iFunctions apiMatta;
private Propriedade propriedade = new Propriedade();
private final PropriedadeDao propriedadeDao;
private List<Estado> estados;
private List<Cidade> cidades;
private List<Cidade> cidadesCobranca;
private Estado estado;
private Estado estadoCobranca;
private Cidade cidade;
private Cidade cidadeCobranca;
private TipoPessoa tipoPessoa;
private List<TipoPessoa> tipoPessoas;
public PropriedadeController() {
apiMatta = new ApiMatta();
propriedadeDao = new PropriedadeDao();
}
@PostConstruct
public void init() {
estados = apiMatta.getEstado();
tipoPessoas = apiMatta.getTipoPessoas();
}
public void getCidadeList(AjaxBehaviorEvent ajaxBehaviorEvent) {
cidades = apiMatta.getCidade(estado);
}
public void getCidadeCobrancaList(AjaxBehaviorEvent ajaxBehaviorEvent) {
cidadesCobranca = apiMatta.getCidade(estadoCobranca);
}
public void onRowSelect(SelectEvent event) {
propriedade = (Propriedade) event.getObject();
}
public String salvar() {
try {
propriedade.setCidade(cidade);
propriedade.setCidadeCobranca(cidadeCobranca);
propriedade.setTipoPessoa(tipoPessoa);
if (propriedadeDao.inserir(propriedade)) {
limparCampos();
ApiMatta.addMessageSuccessful("Aviso", "Propriedade cadastrada com sucesso");
return "index.xhtml";
} else {
return "";
}
} catch (Exception e) {
System.out.println("ERROR SALVAR: " + e.getMessage());
return "";
}
}
public List<Propriedade> listar() {
try {
limparCampos();
return propriedadeDao.read();
} catch (Exception e) {
return null;
}
}
public String deletar(Propriedade propriedade) {
try {
if (propriedadeDao.remover(propriedade)) {
limparCampos();
return "index.xhtml";
} else {
return null;
}
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}
public String editarPropriedade(Propriedade propriedade) {
this.propriedade = propriedade;
this.estado = propriedade.getCidade().getEstado();
this.estadoCobranca = propriedade.getCidadeCobranca().getEstado();
this.cidade = propriedade.getCidade();
this.cidadeCobranca = propriedade.getCidadeCobranca();
this.tipoPessoa = propriedade.getTipoPessoa();
return "alterar.xhtml";
}
public String atualizarPropriedade() {
try {
propriedadeDao.alterar(propriedade);
//propriedades = listar();
limparCampos();
ApiMatta.addMessageSuccessful("Aviso", "Atualizado com sucesso Control");
return "index.xhtml";
} catch (Exception e) {
System.out.println(e.getMessage());
return "";
}
}/*metodo limparCampos(), getters&setters omitidos*/
os SelectOneMenu
de Estado e TipoPessoa
estão ok. O problema é no caso da Cidade.