[英]selectOneMenu doesn't select the default value - JSF + Primefaces + Omnifaces
我在一個小項目中使用JSF 2.0, Primefaces和Omnifaces ,但我遇到了一些麻煩(或者是錯誤,我真的不知道)。
問題是:
我插入了一個類並為這個類設置了一個課程(課程:“Course1”,課程:“Gambiarra”):
當我嘗試編輯同一個類時,CRUD中的所有內容都可以,但是Course的默認值是錯誤的。 您可以等待,當然正確的默認值是“Gambiarra”,但這顯示我“TécnicoemInformática”:
我想解決這個問題,因為用戶期望這個字段中的默認課程,而不僅僅是列表中的第一個。 以下是我的代碼。
<h:panelGrid styleClass="col-lg-10 center">
<label for="curso">Curso:</label>
<p:selectOneMenu id="curso" value="#{turmaMBean.selecionado.curso}" converter="omnifaces.SelectItemsConverter" style="margin-bottom: 15px;">
<f:selectItems value="#{turmaMBean.listaTodosCursos}" var="curso" itemLabel="#{curso.nome}" itemValue="#{curso}"/>
</p:selectOneMenu>
</h:panelGrid>
(注意當用戶點擊一行dataTable時設置“Turma selecionado” - 設置沒問題,在測試中selecionado.getCurso()給了我正確的Curso)
private ArrayList<Curso> listaTodosCursos; // list of all courses
private Turma selecionado;
private ControleCurso controleCurso; // courseControl
public TurmaMBean() {
if (controleCurso == null) {
controleCurso = ControleCurso.getInstance();
}
if (listaTodosCursos == null){
listaTodosCursos = controleCurso.consulta();
}
}
// Getters and Setters
public ControleCurso getControleCurso() {
return controleCurso;
}
public void setControleCurso(ControleCurso controleCurso) {
this.controleCurso = controleCurso;
}
public Turma getSelecionado() {
return selecionado;
}
public void setSelecionado(Turma selecionado) {
this.selecionado = selecionado;
}
public ArrayList<Curso> getListaTodosCursos() {
return listaTodosCursos;
}
public void setListaTodosCursos(ArrayList<Curso> listaTodosCursos) {
this.listaTodosCursos = listaTodosCursos;
}
public class Turma {
private int id;
private String nome;
private Curso curso;
public Turma() {
}
public Turma(int id, String nome){
this.id = id;
this.nome = nome;
}
public Turma(int id, String nome, Curso idCurso) {
this.id = id;
this.nome = nome;
this.curso = idCurso;
}
public Turma(String nome, Curso idCurso) {
this.nome = nome;
this.curso = idCurso;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Curso getCurso() {
return curso;
}
public void setCurso(Curso idCurso) {
this.curso = idCurso;
}
@Override
public String toString() {
return nome;
}
}
已經嘗試過這個答案,但我無法理解,所以這並不能解決我的問題。
如果您需要其他信息,請告訴我我會提供一切。
我對OmniFaces及其轉換器沒有多少經驗,但通常使用不覆蓋hashCode()和equalsTo(...)方法的對象類轉換器會導致一些意外結果。 很可能這就是你在這種情況下遇到的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.