Olá, minha dúvida é a seguinte: como popular um SelectOneMenu através de um bean?
Alguém poderia dar um exemplo de como fazer isso?
Desde já agradeço a atenção. 
No Bean:
public List<SelectItem> getOpcoes() {
List<SelectItem> lst = new ArrayList<SelectItem>();
lst.add(new SelectItem('S', "Sim"));
lst.add(new SelectItem('N', "Não"));
return lst;
}
Na view:
<h:selectOneMenu id="id" value="#{bean.valor}">
<f:selectItems value="#{bean.opcoes}" />
</h:selectOneMenu>
Cara, eu uso conforme abaixo… Qualquer duvida poste novamente!
No JSP
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<h:selectOneMenu id="menu" value="#{mbean.campo}">
<f:selectItems value="#{mbean.listaCombo}" />
</h:selectOneMenu>
No MBean
import javax.faces.model.SelectItem;
List<SelectItem> listaCombo = new ArrayList<SelectItem>();//Crie um ArrayList de SelectItem
listaCombo.add(new SelectItem("codigo", "descricao"));//Cada add que for colocado será uma nova opção no menu
Grande abraço!
Crie no bean uma lista de SelectItem com os dados que tu quer no SelectOneMenu, e na pagina, dentro do SelectOneMenu coloque
<f:selectItems value="#{seuBean.suaLista}" />
Lembrando que a lista precisa do get respectivo.
[quote=jaziel.rc]Crie no bean uma lista de SelectItem com os dados que tu quer no SelectOneMenu, e na pagina, dentro do SelectOneMenu coloque
<f:selectItems value="#{seuBean.suaLista}" />
Lembrando que a lista precisa do get respectivo.
[/quote]
meu mbean
@Model
@SessionScoped
public class ProjectMB implements Serializable {
@Inject
private ProjectRepository projectRepository;
private Project project = new Project();
private List<Project> projects;
public void save() {
if (this.getProject().getId() == null) {
this.projectRepository.add(this.getProject());
} else {
this.projectRepository.edit(this.getProject());
}
this.project = new Project();
this.projects = null;
}
public void delete(Long id) {
this.projectRepository.removeById(id);
this.projects = null;
}
public void prepareEdit(Long id) {
this.project = this.projectRepository.findById(id);
}
//GETTERS e SETTERS
minha pagina:
<h1>Project List</h1>
<h:dataTable value="#{projectMB.projects}" var="project"
rendered="#{not empty projectMB.projects}" border="1">
<h:column>
<f:facet name="header">Id</f:facet>
#{project.id}
</h:column>
<h:column>
<f:facet name="header">Name</f:facet>
#{project.name}
</h:column>
<h:column>
<f:facet name="header">Description</f:facet>
#{project.description}
</h:column>
não consigo ver a listagem de projects.
alguma ideia, alguém?
você preencheu esta lista ?
pois é.
como faria?
estou usando um form para preencher mas salva no banco e não retorna na página.
meu sessionbean:
[code]package sessionbeans;
import java.util.List;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import entities.Bug;
import entities.Project;
@Stateless
public class ProjectRepository {
@PersistenceContext
private EntityManager manager;
public void add(Project project) {
this.manager.persist(project);
}
public void edit(Project project) {
this.manager.merge(project);
}
public void removeById(Long id) {
Project project = this.manager.find(Project.class, id);
TypedQuery<Bug> query = this.manager.createQuery(
"select x from Bug x where x.project_id = :project", Bug.class);
query.setParameter("project", project);
List<Bug> bugs = query.getResultList();
for (Bug bug : bugs) {
this.manager.remove(bug);
}
this.manager.remove(project);
}
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<Project> findAll() {
TypedQuery<Project> query = this.manager.createQuery(
"select x from Project x", Project.class);
return query.getResultList();
}
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public Project findById(Long id) {
return this.manager.find(Project.class, id);
}
public EntityManager getManager() {
return manager;
}
public void setManager(EntityManager manager) {
this.manager = manager;
}
}
[/code]
consegui preencher a lista fazendo isso no meu bean:
public List<Project> getProjects() {
if (this.projects == null) {
this.projects = this.projectRepository.findAll();
}
return projects;
}
mas agora na hora de preencher/salvar um campo dá o seguinte erro:
[code] <h:panelGrid>
<h:inputHidden value="#{bugMB.bug.id}" />
<h:outputLabel value="Severity:" />
<h:selectOneMenu value="#{bugMB.bug.severity}">
<f:selectItem itemValue="LOW" />
<f:selectItem itemValue="MEDIUM" />
<f:selectItem itemValue="HIGH" />
</h:selectOneMenu>
<h:outputLabel for="description" value="Description:" />
<h:inputTextarea id="description" value="#{bugMB.bug.description}" />
<h:outputLabel for="selecaoProjeto" value="Project:" />
<h:selectOneMenu id="selecaoProjeto" value="#{bugMB.projectRepository}">
<f:selectItems value="#{projectMB.projects}" var="project"
itemLabel="#{project.description}" itemValue="#{project}"/>
</h:selectOneMenu>
<h:commandButton action="#{bugMB.save}" value="Save" />
</h:panelGrid>[/code]
Nunca me deparei com isso, mas acredito que o problema está ao gerar a lista, gera esta lista manualmente para ver se o SelectOneMenu é preenchido.
A lista já gerei manualmente.
consigo mostrar no selectonemenu.
mas na hora de salvar essas informaçoes dá o erro de cast, como se meu mbean nao reconhecesse