:index-group: Misc
:jbake-type: page
:jbake-status: status=published
= JSF-CDI-EJB

Aplicação simples que contém um CDI managed bean `CalculatorBean`,
que usa o EJB `Calculator` para adicionar dois números e mostrar os resultados para o usuário. O EJB é injetado no managed bean usando a anotação
@Inject.

Você poderia executar isso no último Apache TomEE
https://repository.apache.org/content/repositories/snapshots/org/apache/openejb/apache-tomee/[snapshot]

O código completo está abaixo, mas vamos quebrá-lo para olhar para alguns trechos menores e ver como ele funciona.

Uma pequena nota sobre a configuração:

Quanto as bibliotecas, myfaces-api e myfaces-impl são fornecidas em
tomee/lib e, portanto não devem ser parte do war. Nos termos do Maven, eles estariam com o escopo `provided'

Observe também que nós usamos a declaração servlet 2.5 no web.xml

E nós usamos a versão 2.0 do faces-config

Para tornar este em um cdi-aware-archive (ou seja, arquivo Bean) um beans.xml vazio
é adicionado no WEB-INF

[source,java]
----
   <?xml version="1.0" encoding="UTF-8"?>

   <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
   </beans>
----

Nós primeiro vamos declarar o FacesServlet no web.xml

[source,java]
----
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
----

FacesServlet atua como o controlador mestre.

Em seguida criaremos o arquivo calculator.xhtml.

[source,java]
----
       <h:outputText value='Enter first number'/>
       <h:inputText value='#{calculatorBean.x}'/>
       <h:outputText value='Enter second number'/>
       <h:inputText value='#{calculatorBean.y}'/>
       <h:commandButton action="#{calculatorBean.add}" value="Add"/>
----

Observe como usamos o bean aqui. Por padrão, o nome do bean seria o nome simples da classe bean com a primeira letra minúscula 

Nós temos o `CalculatorBean` anotado com `@RequestScoped`. Então quando uma requisição vem, o bean é instanciado e colocado no escopo da requisição.

Aqui, o método getX() do calculatorBean é invocado e valor do resultado é apresentado. x sendo um Double, nós devemos ver justamente 0.0 sendo exibido.

Quando você modifica o valor e submete o formulário, esses valores inseridos são vinculados no bean usando os setters e então o método commandButton-action é invocado. 

Neste caso, CalculatorBean#add() é invocado.

Calculator#add() delega o trabalho para o ejb, obtém o resultado, armazena-o e, em seguida, retorna qual view deve ser processada.


O valor de retorno `success` é verificado no faces-config
navigation-rules e a respectiva página é renderizada.

No nosso caso, a página `result.xhtml` é renderizada onde usar EL e mostra o resultado do request-scoped `calculatorBean`.

# Código-fonte

== CalculatorBean

[source,java]
----
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.inject.Inject;

@RequestScoped
@Named
public class CalculatorBean {
    @Inject
    Calculator calculator;
    private double x;
    private double y;
    private double result;

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }

    public double getResult() {
        return result;
    }

    public void setResult(double result) {
        this.result = result;
    }

    public String add() {
        result = calculator.add(x, y);
        return "success";
    }
}
----

== Calculator

[source,java]
----
package org.superbiz.jsf;

import javax.ejb.Stateless;

@Stateless
public class Calculator{

    public double add(double x, double y) {
        return x + y;
    }
}
----

#web.xml

MyProject web.xml

Faces Servlet javax.faces.webapp.FacesServlet 1

Faces Servlet *.jsf

index.jsp index.html

#Calculator.xhtml

<!DOCTYPE html PUBLIC ``-//W3C//DTD XHTML 1.0 Transitional//EN''
``http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd''>

#Result.xhtml

<!DOCTYPE html PUBLIC ``-//W3C//DTD XHTML 1.0 Transitional//EN''
``http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd''>

[source,java]
----
    <h:commandLink action="back">
        <h:outputText value="Home"/>
    </h:commandLink>
</h:form>
----

#faces-config.xml

/calculator.xhtml success /result.xhtml

/result.xhtml back /calculator.xhtml
