Primeiramente bom dia a todos, estou com um problema relacionado ao uso do picklist no meu formulário estou utilizando o glassfish 3.1.2 e primefaces 3.2, já realizei todos os testes possíveis e sempre que coloco um pick list dentro de um form ele não executa o action do command button, realizei diversos testes antes de recorrer a vocês e constatei que o converter está funcionando normalmente verifique se também alguma erro estava ocorrendo no arquivo de logs e constatei que não era já alterei o p:commandbutton para h:commandbutton já alterei a action para actionlistener mas mesmo assim o problema continua não sei mais oq fazer
segue abaixo a minha dialog o converter e o metodo que o action deve chamar.
Dialog
<div xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<p:outputPanel id="insertExit" layout="block">
<p:dialog resizable="false" rendered="#{pageManager.exitIsActive}" id="insertExitDialog" header="Cadastrar de saída" widgetVar="insertExitDialog" modal="false">
<h:form id="insertExitForm">
<p:pickList rendered="#{visitaTecnicaController.renderServiceOrderPickList}" id="pojoPickList" value="#{visitaTecnicaController.orders}" var="serviceOrder" itemValue="#{serviceOrder}" itemLabel="#{serviceOrder.numero}" converter="ordemDeServicoConverter">
<f:facet name="sourceCaption">Disponíveis</f:facet>
<f:facet name="targetCaption">Selecionadas</f:facet>
<p:column style="width:75%;">
#{serviceOrder.numero}
</p:column>
</p:pickList>
<p:commandButton value="Salvar" action="#{visitaTecnicaController.salvar}" />
</h:form>
</p:dialog>
</p:outputPanel>
</div>
Converter
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.visaonet.converters;
import br.com.visaonet.controllers.OrdemDeServicoController;
import br.com.visaonet.entities.OrdemDeServico;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
/**
*
* @author diego
*/
@FacesConverter(value = "ordemDeServicoConverter", forClass = OrdemDeServico.class)
public class OrdemDeServicoConverter implements Converter {
@Override
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
if (value == null || value.length() == 0 || value.equals("null")) {
return null;
}
OrdemDeServicoController controller = (OrdemDeServicoController) facesContext.getApplication().getELResolver().
getValue(facesContext.getELContext(), null, "ordemDeServicoController");
OrdemDeServico temp = controller.getFacade().find(getKey(value));
return temp;
}
java.lang.Integer getKey(String value) {
java.lang.Integer key;
key = Integer.valueOf(value);
return key;
}
String getStringKey(java.lang.Integer value) {
StringBuilder sb = new StringBuilder();
sb.append(value);
return sb.toString();
}
@Override
public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
if (object == null) {
return null;
}
if (object instanceof OrdemDeServico) {
OrdemDeServico o = (OrdemDeServico) object;
return getStringKey(o.getId());
} else {
throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + OrdemDeServico.class.getName());
}
}
}
Metodos que devem ser chamados
public String salvar() {
this.updateOsStatusOnInsertExit(tempDualListModel.getTarget());
return "refreshPage";
}
public void updateOsStatusOnInsertExit(List<OrdemDeServico> orders) {
for (OrdemDeServico ordemDeServico : orders) {
ordemDeServico.setStatus(ServiceOrderStatus.ALOCADA.getValue());
getEjbFacadeOrdemDeServico().edit(ordemDeServico);
}
}