how to change the state of a boolean in mysql jsf

0

How can I change the status of the seller, what I want to do is change the status by just clicking on the link, and change it in the database this is my managedbean

@ManagedBean
@SessionScoped
public class VendedorManagedBean {

private Vendedor vendedor  =new Vendedor();

private List<Vendedor> vendedores = new ArrayList<Vendedor>();

private List<Local> locales = new ArrayList<Local>();

@ManagedProperty(value="#{vendedorService}")
private VendedorService vendedorService;

@ManagedProperty(value="#{localService}")
private LocalService localService;



public String editar(){
    FacesContext context = FacesContext.getCurrentInstance();
    Map<String, String> params = context.getExternalContext()
                                    .getRequestParameterMap();

    String id = params.get("vendedorId");

    vendedor = vendedorService.getVendedorRepositoryy()
                        .findOne(new Long(id));

    return "editar_vendedor";
}
public String buscar2(boolean estado){
    vendedores = vendedorService.getVendedorRepositoryy().obtenerVendedorporestado(estado); 
    return null;
}
public String buscar(){
    vendedores = vendedorService.getVendedorRepositoryy().obtenerVendedorporestado(vendedor.isEstado());    
    return null;
}
public String eliminar(){
    Long id = vendedor.getId();
    vendedorService.getVendedorRepositoryy().delete(id);
    vendedor = new Vendedor();
    return "registro_vendedor"; 
}

public String guardar(){
    vendedorService.getVendedorRepositoryy().save(vendedor);
    vendedor = new Vendedor();
    return "registro_vendedor";
}

public Vendedor getVendedor() {
    return vendedor;
}

public void setVendedor(Vendedor vendedor) {
    this.vendedor = vendedor;
}

public List<Vendedor> getVendedores() {
    vendedores = Lists.newArrayList(vendedorService.getVendedorRepositoryy().findAll());
    return vendedores;
}

public void setVendedores(List<Vendedor> vendedores) {
    this.vendedores = vendedores;
}

public List<Local> getLocales() {
    locales = Lists.newArrayList(localService.getLocalRepositoryy().findAll());

    return locales;
}

public void setLocales(List<Local> locales) {
    this.locales = locales;
}

public VendedorService getVendedorService() {
    return vendedorService;
}

public void setVendedorService(VendedorService vendedorService) {
    this.vendedorService = vendedorService;
}

public LocalService getLocalService() {
    return localService;
}

public void setLocalService(LocalService localService) {
    this.localService = localService;
}
}

In addition, the status must be by default active, as you could insert it without including it visually in the form

    
asked by Lrawls 08.11.2016 в 23:10
source

1 answer

1

It would be nice to see the code you have in facelets , but this implementation is very straightforward:

  • Create a dataTable that renders the list coming from the DB
  • to each "hyperlink" you create a component of type: commandLink
  • The commandLink component is assigned a action="" that calls a method in a backing bean (ManagedBean), e.g: action="#{vendedorManagedBean.toggleState()}"
  • The toggleState().. method does is call a service that will change the status of the "seller".
  • I have not tried it but I hope it works:

    Facelet: admin-seller.xhtml

    <h:dataTable value="#{vendedorManagedBean.vendedores}" var="vendedor">
    
      // el resto de las columnas ....
    
      <h:column>
       <f:facet name="header">estado</f:facet>
       <h:commandLink value="#{vendedorManagedBean.estadoVendedorStr(vendedor.id)}"
                      action="#{vendedorManagedBean.toggleState(vendedor)}" />
      </h:column>
    
    
    </h:dataTable>
    

    ManagedBean:

    @ManagedBean
    @SessionScoped
    public class VendedorManagedBean {
    
    // el resto de las propiedades y métodos ... 
    
    private String estadoVendedorStr;
    
    public String estadoVendedorStr([tipo_dato_id_vendedor] id){
      Vendedor v = vendedores.get(id);
      if(v.getEstado().equals(ACTIVO)){
        return "Activo";
      }
      return "Inactivo";
    }
    
    public String toggleState(Vendedor v){
       servicioDB.cambiarEstado(v);
       return "admin-vendedor?faces-redirect=true";
    }
    
    }
    

    Advice It is not recommended that you leave SellerMAnagedBean of type @SessionScope , if you want to pass information from one page to another, there are other ways to achieve this without needing to use this scope For example, you can use viewParam

    something like this:

    <f:metadata>
        <f:viewParam name="vendedorId" value="#{vendedorManagedBean.vendedorPedidoId}" />
        <f:viewAction action="#{vendedorManagedBean.buscarVendedorPedido()}" />
    </f:metadata>
    

    And in the managed bean what you do is create the following to set the info:

    // setter y getter para  vendedorPedidoId
    
    public void buscarVendedorPedido(){
       vendedor = servicioDB.buscarVendedorPorID(vendedorPedidoId);
    }
    
        
    answered by 09.11.2016 в 16:41