SelectOneMenu JSF 2.1

Galera montei uma 3 views da seguinte forma.

Listar

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>Produto</title>
</h:head>
<h:body>
	<p:fieldset legend="Produto">
		<h:form id="produtoForm">
			<p:commandButton value="Adicionar Registro" icon="ui-icon-plus"
				update=":produtoCreateDialogForm"
				actionListener="#{produtoBean.resetProduto}"
				onclick="incluirProduto.show();" />
			<p:dataTable id="produtoTable"
				value="#{produtoBean.allProduto}" var="produto"
				emptyMessage="Nenhum registro para ser exibido!">
				
				<p:column>
					<f:facet name="header">
						<h:outputText value="Descrição" />
					</f:facet>

					<h:outputText value="#{produto.descricao}" />
				
				</p:column>
				
					<p:column>
					<f:facet name="header">
						<h:outputText value="Preço" />
					</f:facet>

					<h:outputText value="#{produto.precoVenda}" />
				</p:column>

				<p:column>
					<p:commandButton icon="ui-icon-pencil"
						update=":alterarProdutoForm" onclick="alterarProduto.show();">
						<f:setPropertyActionListener
							target="#{produtoBean.produto}"
							value="#{produto}" />
					</p:commandButton>
					<p:spacer width="10px" />
					<p:commandButton icon="ui-icon-trash"
						update=":deletarProdutoForm" onclick="deletarProduto.show();">
						<f:setPropertyActionListener
							target="#{produtoBean.produto}"
							value="#{produto}" />
					</p:commandButton>
				</p:column>

			</p:dataTable>

		</h:form>
	</p:fieldset>

	<ui:include src="/produto/dialogs/alterarproduto.xhtml" />
	<ui:include src="/produto/dialogs/incluirproduto.xhtml" />
	<ui:include src="/produto/dialogs/deletarproduto.xhtml" />
</h:body>
</html>

Incluir

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">
<h:body>
	<p:dialog widgetVar="incluirProduto" id="produtoCreateDialogId"
		height="250" width="600" modal="true" closable="true"
		draggable="false" resizable="false">
		<h:form id="produtoCreateDialogForm" prependId="false">
			<h:panelGrid columns="2">

				<h:outputText value="* Descrição: " />
				<h:inputText value="#{produtoBean.produto.descricao}"
					required="true" label="Descrição: ">
				</h:inputText>

				<h:outputText value="* Preço de Custo " />
				<h:inputText value="#{produtoBean.produto.precoCusto}"
					required="true" label="Preço de Custo ">
				</h:inputText>
				
				<p:outputLabel for="grupoProduto" value="Grupo Produto"/>
				<p:selectOneMenu id="grupoProduto" effect="fade" value="#{produtoBean.grupoProduto.idGrupoProduto}">
					<f:selectItems  value="#{produtoBean.grupoProdutos}"/>    
				</p:selectOneMenu>
				

				<h:outputText value="* Preço de Venda " />
				<h:inputText value="#{produtoBean.produto.precoVenda}"
					required="true" label="Preço de Venda ">
				</h:inputText>

				<h:outputText value="Observação " />
				<h:inputText value="#{produtoBean.produto.observacaoCardapio}"
					required="false" label="Observação ">
				</h:inputText>

				<p:commandButton value="Gravar" icon="ui-icon-plus"
					action="#{produtoBean.createProduto}"
					update=":produtoForm:produtoTable"
					oncomplete="incluirProduto.hide()" />
				<p:commandButton value="Cancelar" icon="ui-icon-cancel"
					actionListener="#{produtoBean.resetProduto}"
					onclick="incluirProduto.hide();" type="button" />
			</h:panelGrid>
		</h:form>
	</p:dialog>
</h:body>
</html>

Alterar

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">
<h:body>
	<p:dialog widgetVar="alterarProduto"
		id="alterarProdutoDialogId" height="250" width="600" modal="true"
		closable="true" draggable="false" resizable="false">
		<h:form id="alterarProdutoForm" prependId="false">
			<h:panelGrid columns="2">
				<h:outputText value="* Descrição: " />
				<h:inputText value="#{produtoBean.produto.descricao}"
					required="true" label="Descrição: ">
				</h:inputText>
				
				<p:outputLabel for="grupoProdutoAlterar" value="Grupo Produto"/>
				<p:selectOneMenu id="grupoProdutoAlterar" effect="fade" value="#{produtoBean.produto.grupoProduto.idGrupoProduto}">
					<f:selectItems  value="#{produtoBean.grupoProdutos}"/>    
				</p:selectOneMenu>
				
				<h:outputText value="* Preço de Custo " />
				<h:inputText value="#{produtoBean.produto.precoCusto}"
					required="true" label="Preço de Custo ">
				</h:inputText>
						
				<h:outputText value="* Preço de Venda " />
				<h:inputText value="#{produtoBean.produto.precoVenda}"
					required="true" label="Preço de Venda ">
				</h:inputText>
				
				<h:outputText value="Observação " />
				<h:inputText value="#{produtoBean.produto.observacaoCardapio}"
					label="Observação ">
				</h:inputText>

				<p:commandButton value="Alterar" icon="ui-icon-plus"
					action="#{produtoBean.updateProduto}"
					update=":produtoForm:produtoTable"
					oncomplete="alterarProduto.hide()" />
				<p:commandButton value="Cancelar" icon="ui-icon-cancel"
					actionListener="#{produtoBean.resetProduto}"
					onclick="alterarProduto.hide();" type="button" />
			</h:panelGrid>
		</h:form>
	</p:dialog>
</h:body>
</html>

Bean

package br.com.unip.menudroidweb.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import br.com.unip.menudroidweb.facade.GrupoProdutoFacade;
import br.com.unip.menudroidweb.facade.ProdutoFacade;
import br.com.unip.menudroidweb.model.GrupoProduto;
import br.com.unip.menudroidweb.model.Produto;

@SessionScoped
@ManagedBean (name = "produtoBean")
public class ProdutoBean extends AbstractBean implements Serializable {
	private static final long serialVersionUID = -3644787609339087086L;
	
	private Produto produto;
	private List<SelectItem> grupoProdutos = new ArrayList<SelectItem>();
	private GrupoProduto grupoProduto;
	private List<Produto> produtoLista;
	private ProdutoFacade produtoFacade;
	private GrupoProdutoFacade grupoProdutoFacade;

	public ProdutoFacade getProdutoFacade() {
		if (produtoFacade == null) {
			produtoFacade = new ProdutoFacade();
		}

		return produtoFacade;
	}

	public Produto getProduto() {
		if (produto == null) {
			produto = new Produto();
		}

		return produto;
	}
	

	public GrupoProduto getGrupoProduto() {
		if (grupoProduto == null) {
			grupoProduto = new GrupoProduto();
			
		}

		return grupoProduto;
	}

	public void setGrupoProduto(GrupoProduto grupoProduto) {
		this.grupoProduto = grupoProduto;
	}

	public GrupoProdutoFacade getGrupoProdutoFacade() {
		if (grupoProdutoFacade == null) {
			grupoProdutoFacade = new GrupoProdutoFacade();
			
		}

		return grupoProdutoFacade;
	}

	public void setGrupoProdutoFacade(GrupoProdutoFacade grupoProdutoFacade) {
		this.grupoProdutoFacade = grupoProdutoFacade;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public void createProduto() {
		try {
			if (grupoProduto != null){
				produto.setGrupoProduto(grupoProduto);
			}else{
				System.out.println("grupoproduto vazio");
			}
			getProdutoFacade().createProduto(produto);
			closeDialog();
			displayInfoMessageToUser("Registro criado com sucesso!");
			loadProduto();
			resetProduto();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
			e.printStackTrace();
		}
	}
	
	public void updateProduto() {
		try {
			getProdutoFacade().updateProduto(produto);
			closeDialog();
			displayInfoMessageToUser("Registro alterado com sucesso!");
			loadProduto();
			resetProduto();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
			e.printStackTrace();
		}
	}
	
	public void deleteProduto() {
		try {
			getProdutoFacade().deleteProduto(produto);
			closeDialog();
			displayInfoMessageToUser("Registro excluído com sucesso!");
			loadProduto();
			resetProduto();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
			e.printStackTrace();
		}
	}
	
	public List<SelectItem> getGrupoProdutos() {
		grupoProdutos.clear();
        grupoProdutos.add(new SelectItem(null, "Selecione"));
        List<GrupoProduto> obterGrupoProduto = getGrupoProdutoFacade().listAll();
        for (int i = 0; i < obterGrupoProduto .size(); i++) {
            GrupoProduto gp = obterGrupoProduto.get(i);
            SelectItem si = new SelectItem(gp.getIdGrupoProduto(), gp.getDescricao());
            grupoProdutos.add(si);
        }

        return grupoProdutos;
	}

	public void setGrupoProdutos(List<SelectItem> grupoProdutos) {
		this.grupoProdutos = grupoProdutos;
	}


	public List<Produto> getAllProduto() {
		if (produtoLista == null) {
			loadProduto();
		}

		return produtoLista;
	}

	private void loadProduto() {
		produtoLista = getProdutoFacade().listAll();
	}

	public void resetProduto() {
		produto = new Produto();
	}
}

Minha duvida é a seguinte, eu cadastro um produto com o grupo de produto XXXX por exemplo
como eu faço para quando eu clicar em alterar o SelectOneMenu venha com o produto XXXX marcado ao invés de “Selecione”

Valeu.

O elemento selectOneMenu precisa que você defina uma propriedade chamada value, mais ou menos assim:

<h:selectOneMenu value="#{bean.valorDoSOM}">
   <f:selectItem itemLabel="Selecione..." itemValue="-1"/>
   <f:selectItems value="#bean.valores}" var="val" itemValue="#{val.value}" itemLabel="#{val.label}"/>
</h:selectOneMenu>

Logo, para definir qual opção será marcada, você precisa que o objeto valorDoSOM possua algum valor e que este seja compatível com alguma opção do selectOneMenu.

valeu cara, consegui
mas consegui desse jeito:

<p:selectOneMenu id="grupoProdutoAlterar" effect="fade" value="#{produtoBean.produto.grupoProduto.idGrupoProduto}">
  <f:selectItems  value="#{produtoBean.grupoProdutos}"/>    
</p:selectOneMenu>

agora preciso procurar sobre validações e como usar o fullpage do primefaces
vocês poderia me indicar algum link sobre isso?