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>