【问题标题】:selectOneMenu doesn't select the default value - JSF + Primefaces + OmnifacesselectOneMenu 不选择默认值 - JSF + Primefaces + Omnifaces
【发布时间】:2013-11-30 03:24:00
【问题描述】:

我在一个小项目中使用 JSF 2.0、Primefaces 和 Omnifaces,但我遇到了一些麻烦(或错误,我真的不知道)。

问题是:
我插入了一个班级并为此班级设置了一个课程(班级:“Course1”,课程:“Gambiarra”):

当我尝试编辑同一个课程时,CRUD 中的所有内容都正常,但 Course 的默认值是错误的。您可以等待,课程的正确默认值是“Gambiarra”,但这显示了“Técnico em Informá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:

(请注意,当用户单击数据表的一行时,会设置“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;
    }  
}

已经尝试过this answer,但我看不懂,所以这不能解决我的问题。

如果您需要其他信息,请告诉我,我会提供一切。

【问题讨论】:

    标签: jsf jsf-2 primefaces omnifaces


    【解决方案1】:

    我对 OmniFaces 及其转换器没有太多经验,但通常使用具有不覆盖 hashCode() 和 equalsTo(...) 的对象类的转换器 em> 方法可能会导致一些意想不到的结果。这很可能就是您在这种情况下遇到的情况。

    【讨论】:

    猜你喜欢
    • 2014-09-03
    • 2012-10-03
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2018-04-06
    • 2013-07-19
    相关资源
    最近更新 更多