style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Poblar un combo con JSF, JPA y EJB

Hola Chavos, estoy atorado con un tema

Necesito poblar un combo de un elemento h:selectOneMenu esto debe suceder cuando llamo a la pagina algo.xhtml el tema es que no logro hacerlo

Entidad

@Entity
@Table(name="pre_plazas", schema="home")
@NamedNativeQuery(name = "SampleNameQuery",
                                        query = "{? =  f_get_plazas_activas",//resultSetMapping="mapping",
                                        resultClass = Plaza.class)  

@NamedStoredProcedureQuery(name="getPlazas", procedureName = "f_get_plazas_activas",resultClasses=Plaza.class/*,
  parameters = {@StoredProcedureParameter(name = "EMP_ID", mode=ParameterMode.IN, type=void.class),
        @StoredProcedureParameter(name = "SAL_INCR", mode=ParameterMode.IN,type=void.class)}*/

)
public class Plaza {
       
        @Id
        @Column(name="plz_s_id_plaza")
        private String idPlaza;
       
        @Column(name="plz_s_plaza")
        private String plaza;  

        public String getIdPlaza() {
                return idPlaza;
        }

        public void setIdPlaza(String idPlaza) {
                this.idPlaza = idPlaza;
        }

        public String getPlaza() {
                return plaza;
        }

        public void setPlaza(String plaza) {
                this.plaza = plaza;
        }              

}

EJB

@Stateless
public class ServicioPendientes{ //implements IServiciosPendientes {

        @PersistenceContext()
    EntityManager em;
       
         public ArrayList<SelectItem> getPlazasActivas(){
                               
                 ArrayList<SelectItem> plazas = new ArrayList<SelectItem>(0);  
                 Query query =  em.createNativeQuery("SELECT f_get_plazas_activas FROM DUAL");
               
                 for(Plaza p : (List<Plaza>) query.getResultList()){
                         plazas.add(new SelectItem(p.getIdPlaza(), p.getPlaza()));
                 }
                 
                 return plazas;        
         }      
}

Controlador

@Named
@RequestScoped
public class ReporteBean {
       
        @EJB   
    ServicioPendientes servicioPendientes;
       
        private ArrayList<SelectItem> plazas;
        private String idPlaza;
       
        public ReporteBean() {
                //plazas =  servicioPendientes.getPlazasActivas();
        }      
       
       
       
        public String getIdPlaza() {
                return idPlaza;
        }
       
        public ArrayList<SelectItem> getPlazas() {
                //return plazas;
                servicioPendientes.getPlazasActivas();
        }

        public void setIdPlaza(String idPlaza) {
                this.idPlaza = idPlaza;
        }

}

La página

        <h:form id="formaPrincipal">
           <h:selectOneMenu  id="comboPlazas" value="#{reporteBean.idPlaza}">    
                        <f:selectItems value="#{reporteBean.plazas}" />
           </h:selectOneMenu>
        </h:form>

No me marca error pero tampoco llego al metodo de la consulta (JPA)

¿Algún tip ? Por favor

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: Poblar un combo

 

También puedes hacer algo como lo siguiente:

  • En ReporteBean:

    import java.util.List;
    import javax.ejb.EJB;
    import javax.enterprise.inject.Model;

    @Model
    public class ReporteBean {

        @EJB
        ServicioPendientes servicioPendientes;

        private String idPlaza;

        public List<Plaza> getPlazasActivas() {
            return servicioPendientes.getPlazasActivas();
        }

        public String getIdPlaza() {
            return idPlaza;
        }

        public void setIdPlaza(String idPlaza) {
            this.idPlaza = idPlaza;
        }

        public String guardar() {
            System.out.printf("idPlaza: %s%n", idPlaza);
            return "";
        }

    }

    NOTA: Para propósitos de reutilización de código, si ServicioPendientes pertece a la capa de servicio, no debería incluir conversiones a componentes de la vista, p.ej. SelectItem. Estos últimos deben hacerse en la capa de presentación, p.ej. ReporteBean.

  • En algo.xhtml:

    <h:form id="formaPrincipal">
        <h:selectOneMenu  id="comboPlazas" value="#{reporteBean.idPlaza}">    
            <f:selectItems value="#{reporteBean.plazasActivas}"
                           var="plaza" itemValue="#{plaza.idPlaza}"
                           itemLabel="#{plaza.plaza}" />
        </h:selectOneMenu>
        <h:commandButton action="#{reporteBean.guardar()}" value="Guardar" />
    </h:form>

~~~

Ok lo tomo en cuenta

Seguieré tus tips de antemano gracias

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">