Popular uma Lista com autocomplete do primefaces
Pessoal estou em uma dúvida cruel , e isso esta me tomando algum tempo e os neurônios que tinha pra queima nisso já queimaram, como sou novato nesse maravilhoso mundo da programação estou sentindo dificuldades então bora lá .
bom criei o botão no meu caso ele esta assim
Bom agora o que eu gostaria de fazer é pegar dessa lista de professores o nome do professor e popular ele pelo autocomplete
no caso eu criei um método assim.
e tipo ele não me da erro mais também não preenche o meu <p:autocomplete> ... será que alguém poderia me esclarecer essa dúvida cruel.
desde já agradeço
bom criei o botão no meu caso ele esta assim
<p:autoComplete id="acTeacher" size="40" value = "#{studentsRoomFace.studentRoom.teacherOf}"
completeMethod="#{studentsRoomFace.completeTeachearOfStudentRoom}" converter="teacherConverter"></p:autoComplete>
Ok, até ai tudo bem.
ta ok agora eu tenho uma classe que esta assim
public class StudentRoom implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Basic
@Column(name="id")
private Integer id;
@OneToMany(mappedBy="studentRoomOf")
private List<Teacher> teacherOf;
@Column(nullable=false,length=100)
private String name;
//get setBom agora o que eu gostaria de fazer é pegar dessa lista de professores o nome do professor e popular ele pelo autocomplete
no caso eu criei um método assim.
public List<Teacher> completeTeachearOfStudentRoom(String busca) {
List<Teacher> results = new ArrayList<Teacher>();
for (Teacher teacher : teachers) {
if(teacher.getName().contains(busca)){
results.add(teacher);
}
}
return results;
}e tipo ele não me da erro mais também não preenche o meu <p:autocomplete> ... será que alguém poderia me esclarecer essa dúvida cruel.
desde já agradeço
Leonardo Silva
Curtidas 0
Respostas
Marcelo Senaga
09/07/2013
Como você está retornando um objeto, precisa usar o converter:
http://www.primefaces.org/showcase/ui/autoCompletePojo.jsf
http://www.primefaces.org/showcase/ui/autoCompletePojo.jsf
GOSTEI 0
Leonardo Silva
09/07/2013
Olá DevMaster bom dia, seguinte eu adicionei alguns elementos na minha linha de código eu vo colar aqui pra você da uma analisada, bom primeiro irei colar a página xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
template="./base.xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<ui:define name="title">
Gerente Musical - Professores - Cadastro de Turmas
</ui:define>
<ui:define name="metadata">
<f:metadata>
<f:viewParam required="false" name="teacher" value="#{studentsRoomFace.selectedBean}">
<f:converter converterId="teacherConverter"/>
</f:viewParam>
</f:metadata>
</ui:define>
<ui:define name="content">
<h:form>
<p:panel id="panelCadTeacher" menuTitle="Cadastro de Turmas" header="Cadastro de Turmas" style="padding-left: 365px; background-color: #AFAFAF;">
<h:panelGrid columns="3" bgcolor=" #c9c986" style=" position: relative;" >
<h:outputLabel value="Professor :"/>
<p:autoComplete id="acTeacher" size="40" value = "#{studentsRoomFace.selectedBean.teacherOf}"
completeMethod="#{studentsRoomFace.completeTeachearOfStudentRoom}" >
</p:autoComplete>
<br/>
<h:outputLabel for="txtNameOfRoom" value="Sala :"/>
<h:inputText id="txtNameOfRoom" size="46" />
<p:message for="txtNameOfRoom"/>
</h:panelGrid>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/> <br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
ok vamos agora aos métodos ...
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.musicmanager.entity;
/**
*
* @author leonardo
*/
@Entity
@Table
public class StudentRoom implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Basic
@Column(name="id")
private Integer id;
@OneToMany(mappedBy="studentRoomOf")
private List<Teacher> teacherOf;
@Column(nullable=false,length=100)
private String name;
public void addTeacher(Teacher tc){
tc.setStudentRoomOf(this);
getTeacherOf().add(tc);
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Teacher> getTeacherOf() {
return teacherOf;
}
public void setTeacherOf(List<Teacher> teacherOf) {
this.teacherOf = teacherOf;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof StudentRoom)) {
return false;
}
StudentRoom other = (StudentRoom) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.musicmanager.entity.RoomUsed[ id=" + id + " ]";
}
}
a minha classe face que faz a iteração...
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.musicmanager.face;
import br.com.musicmanager.entity.StudentRoom;
import br.com.musicmanager.entity.Teacher;
import br.com.musicmanager.session.SchoolSession;
import br.com.musicmanager.session.TeacherSession;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;
/**
*
* @author Leonardo
*/
@ManagedBean
@SessionScoped
public class StudentsRoomFace extends BaseCDIBean<StudentRoom> {
@Inject
private SchoolSession bean;
private Teacher teacher;
@Inject
private TeacherSession teacherBean;
private List<Teacher> teachers;
private StudentRoom studentRoom;
public String doAddNewStudentRoom() {
setSelectedBean(new StudentRoom());
return "/schools/addnewstudentsroom.faces";
}
public String doFinishAddNewStudentRoom() {
return null;
}
//percorra cada elemento teacher existente dentro de teachers
public List<Teacher> completeTeachearOfStudentRoom(String busca) {
List<Teacher> results = new ArrayList<Teacher>();
for (Teacher teacher : teachers) {
if(teacher.getName().contains(busca)){
results.add(teacher);
}
}
return results;
}
public List<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(List<Teacher> teachers) {
this.teachers = teachers;
}
public String doListPanelOfStudentRoom() {
return "/schools/studentsroompanel.faces";
}
public StudentRoom getStudentRoom() {
return studentRoom;
}
public void setStudentRoom(StudentRoom studentRoom) {
this.studentRoom = studentRoom;
}
}
e também agora minha classe converter que eu criei...
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.musicmanager.face.converter;
import br.com.musicmanager.ManualCDILookup;
import br.com.musicmanager.entity.Teacher;
import br.com.musicmanager.session.TeacherSession;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
/**
*
* @author Leonardo
*/
@FacesConverter(value = "teacherConverter")
public class TeacherConverter extends ManualCDILookup implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null) {
TeacherSession bean = getFacadeWithJNDI(TeacherSession.class);
Teacher tch = bean.getTeachersByName(value);
return tch;
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null) {
Teacher tch = (Teacher) value;
return tch.getName();
}
return null;
}
}
para me retornar o nome do professor, bom ai que me pintou outra duvida depois de ter feito tudo isso , o que mais me chamou
a atenção foi que quando eu inseri os comandos no xhtml ...
<ui:define name="metadata">
<f:metadata>
<f:viewParam required="false" name="teacher" value="#{studentsRoomFace.selectedBean}">
<f:converter converterId="teacherConverter"/>
</f:viewParam>
</f:metadata>
</ui:define>
combinando-os com o autocomplete ele me gerou um erro de classCastException...
java.lang.ClassCastException: br.com.musicmanager.entity.StudentRoom cannot be cast to br.com.musicmanager.entity.Teacher
at br.com.musicmanager.face.converter.TeacherConverter.getAsString(TeacherConverter.java:35)
at javax.faces.component.UIViewParameter.getStringValueFromModel(UIViewParameter.java:378)
at javax.faces.component.UIViewParameter.getStringValue(UIViewParameter.java:327)
at javax.faces.component.UIViewParameter.encodeAll(UIViewParameter.java:313)
at javax.faces.component.UIViewRoot.encodeViewParameters(UIViewRoot.java:1665)
at javax.faces.component.UIViewRoot.encodeEnd(UIViewRoot.java:1004)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
Então pelo que eu consegui entender foi que ele não conseguiu fazer o cast entre a classe studentRoom e teacher, se alguém
pude me ajudar eu agradeço muito , Obrigado !, já não consigo intender o que acontece
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
template="./base.xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<ui:define name="title">
Gerente Musical - Professores - Cadastro de Turmas
</ui:define>
<ui:define name="metadata">
<f:metadata>
<f:viewParam required="false" name="teacher" value="#{studentsRoomFace.selectedBean}">
<f:converter converterId="teacherConverter"/>
</f:viewParam>
</f:metadata>
</ui:define>
<ui:define name="content">
<h:form>
<p:panel id="panelCadTeacher" menuTitle="Cadastro de Turmas" header="Cadastro de Turmas" style="padding-left: 365px; background-color: #AFAFAF;">
<h:panelGrid columns="3" bgcolor=" #c9c986" style=" position: relative;" >
<h:outputLabel value="Professor :"/>
<p:autoComplete id="acTeacher" size="40" value = "#{studentsRoomFace.selectedBean.teacherOf}"
completeMethod="#{studentsRoomFace.completeTeachearOfStudentRoom}" >
</p:autoComplete>
<br/>
<h:outputLabel for="txtNameOfRoom" value="Sala :"/>
<h:inputText id="txtNameOfRoom" size="46" />
<p:message for="txtNameOfRoom"/>
</h:panelGrid>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/> <br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
ok vamos agora aos métodos ...
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.musicmanager.entity;
/**
*
* @author leonardo
*/
@Entity
@Table
public class StudentRoom implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Basic
@Column(name="id")
private Integer id;
@OneToMany(mappedBy="studentRoomOf")
private List<Teacher> teacherOf;
@Column(nullable=false,length=100)
private String name;
public void addTeacher(Teacher tc){
tc.setStudentRoomOf(this);
getTeacherOf().add(tc);
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Teacher> getTeacherOf() {
return teacherOf;
}
public void setTeacherOf(List<Teacher> teacherOf) {
this.teacherOf = teacherOf;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof StudentRoom)) {
return false;
}
StudentRoom other = (StudentRoom) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.musicmanager.entity.RoomUsed[ id=" + id + " ]";
}
}
a minha classe face que faz a iteração...
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.musicmanager.face;
import br.com.musicmanager.entity.StudentRoom;
import br.com.musicmanager.entity.Teacher;
import br.com.musicmanager.session.SchoolSession;
import br.com.musicmanager.session.TeacherSession;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;
/**
*
* @author Leonardo
*/
@ManagedBean
@SessionScoped
public class StudentsRoomFace extends BaseCDIBean<StudentRoom> {
@Inject
private SchoolSession bean;
private Teacher teacher;
@Inject
private TeacherSession teacherBean;
private List<Teacher> teachers;
private StudentRoom studentRoom;
public String doAddNewStudentRoom() {
setSelectedBean(new StudentRoom());
return "/schools/addnewstudentsroom.faces";
}
public String doFinishAddNewStudentRoom() {
return null;
}
//percorra cada elemento teacher existente dentro de teachers
public List<Teacher> completeTeachearOfStudentRoom(String busca) {
List<Teacher> results = new ArrayList<Teacher>();
for (Teacher teacher : teachers) {
if(teacher.getName().contains(busca)){
results.add(teacher);
}
}
return results;
}
public List<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(List<Teacher> teachers) {
this.teachers = teachers;
}
public String doListPanelOfStudentRoom() {
return "/schools/studentsroompanel.faces";
}
public StudentRoom getStudentRoom() {
return studentRoom;
}
public void setStudentRoom(StudentRoom studentRoom) {
this.studentRoom = studentRoom;
}
}
e também agora minha classe converter que eu criei...
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.musicmanager.face.converter;
import br.com.musicmanager.ManualCDILookup;
import br.com.musicmanager.entity.Teacher;
import br.com.musicmanager.session.TeacherSession;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
/**
*
* @author Leonardo
*/
@FacesConverter(value = "teacherConverter")
public class TeacherConverter extends ManualCDILookup implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null) {
TeacherSession bean = getFacadeWithJNDI(TeacherSession.class);
Teacher tch = bean.getTeachersByName(value);
return tch;
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null) {
Teacher tch = (Teacher) value;
return tch.getName();
}
return null;
}
}
para me retornar o nome do professor, bom ai que me pintou outra duvida depois de ter feito tudo isso , o que mais me chamou
a atenção foi que quando eu inseri os comandos no xhtml ...
<ui:define name="metadata">
<f:metadata>
<f:viewParam required="false" name="teacher" value="#{studentsRoomFace.selectedBean}">
<f:converter converterId="teacherConverter"/>
</f:viewParam>
</f:metadata>
</ui:define>
combinando-os com o autocomplete ele me gerou um erro de classCastException...
java.lang.ClassCastException: br.com.musicmanager.entity.StudentRoom cannot be cast to br.com.musicmanager.entity.Teacher
at br.com.musicmanager.face.converter.TeacherConverter.getAsString(TeacherConverter.java:35)
at javax.faces.component.UIViewParameter.getStringValueFromModel(UIViewParameter.java:378)
at javax.faces.component.UIViewParameter.getStringValue(UIViewParameter.java:327)
at javax.faces.component.UIViewParameter.encodeAll(UIViewParameter.java:313)
at javax.faces.component.UIViewRoot.encodeViewParameters(UIViewRoot.java:1665)
at javax.faces.component.UIViewRoot.encodeEnd(UIViewRoot.java:1004)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
Então pelo que eu consegui entender foi que ele não conseguiu fazer o cast entre a classe studentRoom e teacher, se alguém
pude me ajudar eu agradeço muito , Obrigado !, já não consigo intender o que acontece
GOSTEI 0
Marcelo Senaga
09/07/2013
Onde está definido o studentsRoomFace.selectedBean?
Poste o código.
Poste o código.
GOSTEI 0
Leonardo Silva
09/07/2013
Grande amigo DevMaster está ai ...
desde já agradeço a atenção
@ManagedBean
@SessionScoped
public class StudentsRoomFace extends BaseCDIBean<StudentRoom> {
@Inject
private SchoolSession bean;
private Teacher teacher;
@Inject
private TeacherSession teacherBean;
private List<Teacher> teachers;
private StudentRoom studentRoom;
public StudentsRoomFace() {
}
public String doAddNewStudentRoom() {
setSelectedBean(new StudentRoom());
return "/schools/addnewstudentsroom.faces";
}
public String doFinishAddNewStudentRoom() {
return null;
}
//percorra cada elemento teacher existente dentro de teachers
public List<Teacher> completeTeachearOfStudentRoom(String busca) {
List<Teacher> results = new ArrayList<Teacher>();
for (Teacher teacher : teachers) {
if(teacher.getName().contains(busca)){
results.add(teacher);
}
}
return results;
}
public List<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(List<Teacher> teachers) {
this.teachers = teachers;
}
public String doListPanelOfStudentRoom() {
return "/schools/studentsroompanel.faces";
}
public StudentRoom getStudentRoom() {
return studentRoom;
}
public void setStudentRoom(StudentRoom studentRoom) {
this.studentRoom = studentRoom;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
}desde já agradeço a atenção
GOSTEI 0
Marcelo Senaga
09/07/2013
hum...
Aqui.
Vc seta o selectBean como sendo StudentRoom.
Porém o converter espera um:
É esse o problema.
Por que você está usando esse código?
E não deveria ser:
Não esquecer do get/set do teacher:
Aqui.
public String doAddNewStudentRoom() {
setSelectedBean(new StudentRoom());
return "/schools/addnewstudentsroom.faces";
}
Vc seta o selectBean como sendo StudentRoom.
Porém o converter espera um:
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null) {
Teacher tch = (Teacher) value;
return tch.getName();
}
return null;
}
}
É esse o problema.
Por que você está usando esse código?
<f:viewParam required="false" name="teacher" value="#{studentsRoomFace.selectedBean}">
<f:converter converterId="teacherConverter"/>
</f:viewParam>
E não deveria ser:
<f:viewParam required="false" name="teacher" value="#{studentsRoomFace.teacher}">
<f:converter converterId="teacherConverter"/>
</f:viewParam>
Não esquecer do get/set do teacher:
private Teacher teacher;
GOSTEI 0
Leonardo Silva
09/07/2013
Opa bom dia DevMaster, então eu acho que ai mata a maior charada , a unica coisa que eu estou me perdendo agora é que eu tenho que gravar o professor que vai utilizar a sala ... lá na entidade StudentRoom eu criei um campo assim
@OneToMany
private List<Teacher> teacher;
com esse campo que eu estou tentando fazer lá eu quero pegar um Teacher que esta gravado no banco e salvar ele na tabela StudentRoom. isso que esta meio confuso ...
@OneToMany
private List<Teacher> teacher;
com esse campo que eu estou tentando fazer lá eu quero pegar um Teacher que esta gravado no banco e salvar ele na tabela StudentRoom. isso que esta meio confuso ...
GOSTEI 0
Marcelo Senaga
09/07/2013
Está confuso mesmo. Você poderia criar uma variável Teacher no seu ManagedBean, ao invés de tentar usar o da entidade. E depois que essa variável for salva, atribuir ela a essa lista de Teacher e usar o Hibernate.
GOSTEI 0
Leonardo Silva
09/07/2013
Bom dia devmaster , será que você poderia mostrar um exemplo desse comando, pois acho que nunca fiz esse tipo de relacionamento... ou se tiver algum post ou video ou alguma coisa para pesquisar dentro do site DevMedia , você pode me passar e eu irei tentar encontrar esses exemplos... Agradeço muito sua atenção
GOSTEI 0