1
resposta

Problema com ViewParam e ViewAction

Mesmo tendo escrito os dois métodos na classe LivroBean de acordo com a convenção, ao acessar a página livro.xhtml ele aponta que não encontra os métodos, alguém deve ter passado pelo mesmo problema, segue minha classe, as xhtml e o faces-config

<?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:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:f="http://xmlns.jcp.org/jsf/core">

    <ui:composition template="_template.xhtml">

        <f:metadata>
            <f:viewParam name="autorId" value="#{autorBean.autorId}"/>
            <f:viewAction action="#{autorBean.carregaAutorPeloId}"/>
        </f:metadata>

        <ui:define name="titulo">
            Novo Autor
        </ui:define>

        <ui:define name="conteudo">
            <h:form>
                <fieldset>
                    <legend>Dados do Autor</legend>
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Nome:" for="nome" />
                        <h:inputText id="nome" value="#{autorBean.autor.nome}" />
                        <h:commandButton value="Gravar" action="#{autorBean.gravar}" />
                    </h:panelGrid>
                </fieldset>
            </h:form>

            <h:form id="formTabelaAutores">
                <h:dataTable id="tabelaAutores" value="#{autorBean.autores}" var="autor">
                      <h:column>
                        <f:facet name="header">Autor</f:facet>
                        <h:outputText value="#{autor.nome}" />
                      </h:column>
                      <h:column>
                        <f:facet name="header">Remover</f:facet>
                           <h:commandLink value="remove" action="#{autorBean.remover(autor)}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">Alterar</f:facet>
                           <h:commandLink value="altera" action="#{autorBean.carregar(autor)}"/>
                    </h:column>
                </h:dataTable>
            </h:form>

        </ui:define>
    </ui:composition>

</html>
package br.com.caelum.livraria.bean;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.caelum.livraria.dao.DAO;
import br.com.caelum.livraria.modelo.Autor;

@ManagedBean
@ViewScoped
public class AutorBean {

    private Autor autor = new Autor();
    private Integer autorId;

    public String gravar() {
        System.out.println("Gravando autor " + this.autor.getNome());

        if (autor.getId() == null) {
            new DAO<Autor>(Autor.class).adiciona(autor);
        } else {
            new DAO<Autor>(Autor.class).atualiza(autor);
        }

        this.autor = new Autor();

        return "livro?faces-redirect=true";
    }

    public List<Autor> getAutores() {
        return new DAO<Autor>(Autor.class).listaTodos();
    }

    public void remover(Autor autor) {
        new DAO<Autor>(Autor.class).remove(autor);
    }

    public void carregar(Autor autor) {
        System.out.println("Carregando livro");
        this.autor = autor;
    }

    public Autor getAutor() {
        return autor;
    }

    public void setAutor(Autor autor) {
        this.autor = autor;
    }

    public Integer getAutorId() {
        return autorId;
    }

    public void setAutorId(Integer autorId) {
        this.autorId = autorId;
    }

    public void carregaAutorPeloId(){
        this.autor = new DAO<Autor>(Autor.class).buscaPorId(autorId);
    }

}
<?xml version="1.0" encoding="UTF-8"?>

<faces-config version="2.2"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">

    <lifecycle>
        <phase-listener>br.com.caelum.livraria.util.LogPhaseListener</phase-listener>
    </lifecycle>

</faces-config>
1 resposta

Fala aí Guilherme, blz?

Cara qual a URL que você está usando para acessar essa página?