簡體   English   中英

selectOneMenu不選擇默認值 - JSF + Primefaces + Omnifaces

[英]selectOneMenu doesn't select the default value - JSF + Primefaces + Omnifaces

我在一個小項目中使用JSF 2.0, PrimefacesOmnifaces ,但我遇到了一些麻煩(或者是錯誤,我真的不知道)。

問題是:
我插入了一個類並為這個類設置了一個課程(課程:“Course1”,課程:“Gambiarra”): 在此輸入圖像描述

當我嘗試編輯同一個類時,CRUD中的所有內容都可以,但是Course的默認值是錯誤的。 您可以等待,當然正確的默認值是“Gambiarra”,但這顯示我“TécnicoemInformática”: 在此輸入圖像描述

我想解決這個問題,因為用戶期望這個字段中的默認課程,而不僅僅是列表中的第一個。 以下是我的代碼。

查看 - JSF:

<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>

TurmaMBean:

(注意當用戶點擊一行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;
}

Turma:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM