Удалить строки базы данных в JSF dataTable - PullRequest
0 голосов
/ 30 мая 2018

Когда я запускаю и нажимаю кнопку «Удалить», на странице появляется эта ошибка:

Невозможно найти соответствующий вариант навигации с from-view-id '/ApagarCategoria.xhtml' для действия '# {registarVendedor.deleteCtg (c)} 'с результатом' [entity.Categorias [categoryoria = Carro]] '

Контроллер

В RegistoVendedor.java функция общедоступный список <Категории> deleteCtg (Категории ct)

package Controller;


public class RegistoVendedor {

@EJB
RegistoBean registarVendedor;

String contacto;
String password;

Categorias categoria = new Categorias();


List<Categorias> categoriasList = new ArrayList<>();

public List<Categorias> getCategoriasList() {
    return categoriasList;
}

public void setCategoriasList(List<Categorias> categoriasList) {
    this.categoriasList = categoriasList;
}

public List<Categorias> deleteCtg(Categorias ct) {        
    categoriasList = registarVendedor.removeCtg(ct);
    return categoriasList;
} 
}

В RegistoBean.java функция имеет вид общедоступный список <категории> removeCtg (категории ct)

@Stateless
public class RegistoBean {

@PersistenceContext
EntityManager em;

public List<Categorias> removeCtg(Categorias ct){
    em.createNamedQuery("Categorias.removeCategoria");
    return getCtg();
}

public List<Categorias> getCtg(){
    return (List<Categorias>) em.createNamedQuery("Categorias.findAll").getResultList();
}
}

категория.javaбаза данных

@Entity
@Table(name = "CATEGORIAS")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Categorias.findAll", query = "SELECT c FROM Categorias c")
, @NamedQuery(name = "Categorias.findByCategoria", query = "SELECT c FROM Categorias c WHERE c.categoria = :categoria")
, @NamedQuery(name = "Categorias.removeCategoria", query = "DELETE FROM Categorias c WHERE c.categoria = :categoria")})
public class Categorias implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 200)
@Column(name = "CATEGORIA")
private String categoria;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "categoriaCategorias")
private Collection<Produtos> produtosCollection;

public Categorias() {
}

public Categorias(String categoria) {
    this.categoria = categoria;
}

public String getCategoria() {
    return categoria;
}

public void setCategoria(String categoria) {
    this.categoria = categoria;
}

@XmlTransient
public Collection<Produtos> getProdutosCollection() {
    return produtosCollection;
}

public void setProdutosCollection(Collection<Produtos> produtosCollection) {
    this.produtosCollection = produtosCollection;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (categoria != null ? categoria.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Categorias)) {
        return false;
    }
    Categorias other = (Categorias) object;
    if ((this.categoria == null && other.categoria != null) || (this.categoria != null && !this.categoria.equals(other.categoria))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "entities.Categorias[ categoria=" + categoria + " ]";
}

}

ApagarCategoria.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
    <title>Apagar Categoria</title>
</h:head>
<h:body>
    <br></br>
    <div align="center" >
        <h1 align="center">Lista de Categorias</h1>

        <div align ="center">
<h:form>
            <h:dataTable value = "#{registarVendedor.listarCategorias()}" var = "c" 
                         styleClass = "authorTable" 
                         headerClass = "authorTableHeader" 
                         rowClasses = "authorTableOddRow,authorTableEvenRow"
                         width = "600">

                <h:column><f:facet name = "header"> Categoria </f:facet>
                        #{c.categoria}
                    <f:facet name = "header2"> </f:facet> 
                </h:column>
                <h:column>

                    <p> <h:commandButton value="Delete" class="button1" action="#{registarVendedor.deleteCtg(c)}">
                                    <f:setPropertyActionListener target="#{registarVendedor.categoria}" value="#{c}"/> 
                                </h:commandButton></p>  

                </h:column>

            </h:dataTable>
</h:form>
        </div>
        <h:form >
            <p> <h:commandButton value="Voltar" class="button1" action="MenuVendedor"></h:commandButton></p>
        </h:form>
    </div>
</h:body>

Я знаю, что есть сомнения, но я пробовал решения, и это не работает

1 Ответ

0 голосов
/ 30 мая 2018

Ошибка:

Невозможно найти соответствующую навигацию

Возвращаемое значение "# {registarVendedor.deleteCtg (c)}" используется JSF для определения того, какойвид должен быть просмотрен следующим.Но вы возвращаете список, чтобы jsf потерялся.Вам нужно вернуть String или void.

Если вы сделаете это, это сработает

public void deleteCtg(Categorias ct) {        
     categoriasList = registarVendedor.removeCtg(ct);
} 

Вам действительно нужен этот список?Вы можете получить это с getCategoriasList().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...