selectOneMenu com objetos

Pessoal,

Ao inserir um selectonemenu na minha tela JSF primefaces com objetos, a action nao executa mais. A tela:

<ui:composition template="template.xhtml">
		<ui:define name="centro">
			<h:form id="form">
				<p:dataTable id="notas" var="nota" value="#{conhecimentoBean.lista}"
					paginator="true" rows="10"
					filteredValue="#{conhecimentoBean.conhecimento.notasFiscais}"
					rowKey="#{nota.nNf}" selection="#{conhecimentoBean.selecionadas}">

					<f:facet name="header">  
		                Notas
		            </f:facet>

					<p:column selectionMode="multiple" style="width:18px" />

					<p:column headerText="Numero">
						<h:outputText value="#{nota.nNf}" />
					</p:column>

					<p:column headerText="Cliente">
						<h:outputText value="#{nota.cliente.nome}" />
					</p:column>

					<p:column headerText="Logistica" id="logColumn"
						filterBy="#{nota.logistica.nomeLogistica}"
						filterOptions="#{conhecimentoBean.opcoesLog}"
						filterMatchMode="exact">
						<h:outputText value="#{nota.logistica.nomeLogistica}" />
					</p:column>

					<p:column headerText="Status">
						<h:outputText value="#{nota.status.nome}" />
					</p:column>

				</p:dataTable>

				<h:selectOneMenu value="#{conhecimentoBean.conhecimento.veiculo}">
					<f:selectItems value="#{conhecimentoBean.opcoesVei}" var="t"
						itemLabel="#{t.modelo}" itemValue="#{t}" />
				</h:selectOneMenu>
				
				<p:commandButton value="Gerar"
					actionListener="#{conhecimentoBean.gerar}" />
			</h:form>
		</ui:define>
	</ui:composition>

O bean:

@ManagedBean
@SessionScoped
public class ConhecimentoBean implements Serializable
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private static Logger logger = Logger.getLogger(ConhecimentoBean.class);

	private List<NotaFiscalVO> lista = null;

	private ServiceDTO requestDTO = new ServiceDTO();
	private ServiceDTO responseDTO = new ServiceDTO();
	private ConhecimentoVO conhecimento = new ConhecimentoVO();
	private SelectItem[] opcoesLog = null;
	private List<LogisticaVO> logisticas = null;
	private NotaFiscalVO[] selecionadas;
	private List<VeiculoVO> veiculos = null;
	private SelectItem[] opcoesVei = null;

	public List<VeiculoVO> getVeiculos()
	{
		return veiculos;
	}

	public void setVeiculos(List<VeiculoVO> veiculos)
	{
		this.veiculos = veiculos;
	}

	public SelectItem[] getOpcoesVei()
	{
		SelectItem[] itens = new SelectItem[veiculos.size()];

		for (int i = 0; i < veiculos.size(); i++)
		{
			itens[i] = new SelectItem(veiculos.get(i), veiculos.get(i)
					.getModelo());
		}
		return itens;
	}

	public void setOpcoesVei(SelectItem[] opcoesVei)
	{
		this.opcoesVei = opcoesVei;
	}

	public NotaFiscalVO[] getSelecionadas()
	{
		return selecionadas;
	}

	public void setSelecionadas(NotaFiscalVO[] selecionadas)
	{
		this.selecionadas = selecionadas;
	}

	public ConhecimentoBean()
	{
		lista = atualizarDados();
	}

	public void gerar(ActionEvent actionEvent)
	{
		conhecimento.setNotasFiscais(Arrays.asList(selecionadas));
		requestDTO.set("vo", conhecimento);

		try
		{

			responseDTO = BusinessDelegate.getInstance().conhecimentoInserir(
					requestDTO);

			limparServiceDTO();
			atualizarDados();
		}
		catch (Exception e)
		{
			logger.error(e);
		}
	}

	private void limparServiceDTO()
	{
		conhecimento = new ConhecimentoVO();
		requestDTO = new ServiceDTO();
		responseDTO = new ServiceDTO();
	}

	@SuppressWarnings("unchecked")
	public List<NotaFiscalVO> atualizarDados()
	{
		List<NotaFiscalVO> NotasVOsBanco = null;
		List<LogisticaVO> LogVOsBanco = null;
		List<VeiculoVO> VeiculoVOsBanco = null;

		try
		{
			responseDTO = BusinessDelegate.getInstance().notaFiscalListar();
			NotasVOsBanco = (List<NotaFiscalVO>) responseDTO.get("lista");
			lista = NotasVOsBanco;

			responseDTO = BusinessDelegate.getInstance().logisticaListar();
			LogVOsBanco = (List<LogisticaVO>) responseDTO.get("lista");
			logisticas = LogVOsBanco;

			responseDTO = BusinessDelegate.getInstance().veiculoListar();
			VeiculoVOsBanco = (List<VeiculoVO>) responseDTO.get("lista");
			veiculos = VeiculoVOsBanco;

			limparServiceDTO();
		}
		catch (Exception e)
		{
			logger.error(e);
		}

		return ((List<NotaFiscalVO>) NotasVOsBanco);
	}

	public List<NotaFiscalVO> getLista()
	{
		return lista;
	}

	public void setLista(List<NotaFiscalVO> lista)
	{
		this.lista = lista;
	}

	public ConhecimentoVO getConhecimento()
	{
		return conhecimento;
	}

	public void setConhecimento(ConhecimentoVO conhecimento)
	{
		this.conhecimento = conhecimento;
	}

	public SelectItem[] getOpcoesLog()
	{
		SelectItem[] itens = new SelectItem[logisticas.size()];

		for (int i = 0; i < logisticas.size(); i++)
		{
			itens[i] = new SelectItem(logisticas.get(i), logisticas.get(i)
					.getNomeLogistica());
		}
		return itens;
	}

	public void setOpcoesLog(SelectItem[] opcoesLog)
	{
		this.opcoesLog = opcoesLog;
	}

	public List<LogisticaVO> getLogisticas()
	{
		return logisticas;
	}

	public void setLogisticas(List<LogisticaVO> logisticas)
	{
		this.logisticas = logisticas;
	}
}

Qual erro que gera?

Provavelmente falta um Converter para seu selectOneMenu.

[quote=fer.ferreira6]Qual erro que gera?

Provavelmente falta um Converter para seu selectOneMenu.[/quote]

+1

não vi cv usar o attribute “converter” no seu selectOneMenu.

abraços

Eu fiz o mesmo esquema em outra tela, porem os objetos são Enums e deu certo, fiz esse esquema aqui pra nao precisa usa converter:

http://www.codesample.co/2012/06/exemplo-jsf2-selectcombo-sem-coverter/

Gera algum erro?

O atributo veiculo, da classe Conhecimento é uma lista?

Não acontece nada, e sim, o atributo veiculo é uma lista, mas ja tentei colocar separado com vetor e tambem nao funcionou, so funciona quando coloco immediate = true, porém, vem com os atributos nulos

E onde você inicializa essa lista?

É que esse codigo ta com a lista, mas no vetor eu fazia pelo limparServiceDTO. Era mais ou menos assim

private VeiculoVO[] selectVeiculos = null;

 private void limparServiceDTO()  
    {  
        selectVeiculos = new VeiculoVO[veiculos.size()]
        conhecimento = new ConhecimentoVO();  
        requestDTO = new ServiceDTO();  
        responseDTO = new ServiceDTO();  
    }