基于JPA查询初始化列表?

时间:2017-09-14 15:41:07

标签: jsf jpa

下午好。我有一个运算符列表,我初始化如下。

@ManagedBean
@ViewScoped
public class TiemposBean implements Serializable {

    @EJB
    private OperariosFacade operariosFacade;

    private List<Operarios> operariosList;

    @PostConstruct
    public void inicializarBean() {
        operariosList = operariosFacade.findAll();
    }


    public List<Operarios> getOperariosList() {
        return operariosList;
    }

    public void setOperariosList(List<Operarios> operariosList) {
        this.operariosList = operariosList;
    }
}

列表正常初始化,我使用它没有任何问题,但我想根据以下数据库查询初始化它。

 SELECT * FROM `operarios` WHERE `ESTADO_OPERARIO` = 1 AND `TIPO_ESTADO_OPERARIO` = 1;

在我的JPQL查询中如下。

@NamedQuery(name = "Operarios.findByNombreLista", query = "SELECT o FROM Operarios o WHERE o.idEstadoOperario = :idEstadoOperario AND o.tipoEstadoOperario = :tipoEstadoOperario"),

我为调用该查询而构建的方法如下。

public void inicializarLista() {

    String namedQuery = "Operarios.findByNombreLista";
    Map<String, Object> parametros = new HashMap<>();
    parametros.put("idEstadoOperario", 1);
    parametros.put("tipoEstadoOperario", 1); 
    operariosList = operariosFacade.findByNamedQuery(namedQuery, parametros);
}

并且已经修改了我的bean。

@ManagedBean
@ViewScoped
public class TiemposBean implements Serializable {

    @EJB
    private OperariosFacade operariosFacade;

    private List<Operarios> operariosList;

    @PostConstruct
    public void inicializarBean() {
        operariosList = new ArrayList<>();
    }


    public List<Operarios> getOperariosList() {
        return operariosList;
    }

    public void setOperariosList(List<Operarios> operariosList) {
        this.operariosList = operariosList;
    }
}

在我看来,我将其称为如下

<p:outputLabel for="somOperario" value="Operario"/>
<p:selectOneMenu id="somOperario" value="#{tiemposBean.operarioSeleccionado}"                         
                 filter="true"
                 converter="operariosConverter">
    <f:selectItem itemLabel="Seleccione uno"/>
    <f:selectItems value="#{tiemposBean.operariosList}"
                   var="operarioVar"
                   itemValue="#{operarioVar}"
                   itemLabel="#{operarioVar.nombre}"
                   />                 
</p:selectOneMenu>
<p:message for="somOperario" id="msg_somOperario"/>

但我不会初步告诉我,我做错了请我需要你的帮助。感谢

1 个答案:

答案 0 :(得分:0)

根据您发布的代码,不会调用“inicializarLista”方法。您有一个托管bean:

@PostConstruct
public void inicializarBean() {

     operariosList = new ArrayList<>();

}

但您正在加载列表:

public void inicializarLista()

请致电inicializarLista() @PostConstruct方法:

@PostConstruct
public void inicializarBean() {
      //This step is not necessary any more!
      operariosList = new ArrayList<>();

      inicializarLista();
}