Agora aparece:
message /livro.xhtml @14,78 value="#{livroBean.livro.titulo}": Target Unreachable, identifier 'livroBean' resolved to null
description The server encountered an internal error that prevented it from fulfilling this request.
livro.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://java.sun.com/jsf/html">
<h:body>
<h1>Novo livro.</h1>
<h:form>
<fieldset>
<legend>Dados do livro</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Titulo:" for="titulo" />
<h:inputText id="titulo" value="#{livroBean.livro.titulo}" />
<h:outputLabel value="ISBN:" for="isbn" />
<h:inputText id="isbn" value="#{livroBean.livro.isbn}" />
<h:outputLabel value="Preço:" for="preco" />
<h:inputText id="preco" value="#{livroBean.livro.preco}" />
<h:outputLabel value="Data de Lançamento:" for="dataLancamento" />
<h:inputText id="dataLancamento" value="#{livroBean.livro.dataLancamento}" />
<h:commandButton value="Gravar" action="#{livroBean.gravar}"/>
</h:panelGrid>
</fieldset>
</h:form>
</h:body>
</html>
LivroBean.java
package br.com.alura.livraria.bean;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class LivroBean {
private Livro livro = new Livro();
public Livro getLivro() {
return livro;
}
public String gravar() {
return "Gravando livro " + this.livro.getTitulo();
}
}
Livro.java
package br.com.alura.livraria.bean;
public class Livro {
private String titulo;
private String isbn;
private double preco;
private String dataLancamento;
public Livro() {
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
public String getDataLancamento() {
return dataLancamento;
}
public void setDataLancamento(String dataLancamento) {
this.dataLancamento = dataLancamento;
}
}