http://www.k19.com.br/downloads/apostilas-java/k19-k12-desenvolvimento-web-com-jsf2-e-jpa2
segue o código
index.xhtml<!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:head>
<title>Gerador de Apostas</title>
</h:head>
<h:body>
<h:form>
<h:panelGrid>
<h:outputLabel value="Quantidade total de números:"/>
<h:inputText value="#{geradorDeAposta.quantidadeDeNumeros}"/>
<h:outputLabel value="Quantidade de números por aposta:"/>
<h:inputText value="#{geradorDeAposta.tamanhoDaAposta}"/>
<h:outputLabel value="Quantidade de apostas:"/>
<h:inputText value="#{geradorDeAposta.quantidadeDeApostas}"/>
<h:commandButton action="#{geradorDeAposta.geraApostas}" value="Gerar"/>
</h:panelGrid>
</h:form>
</h:body>
</html>
package modelo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class GeradorDeAposta implements Serializable
{
private int quantidadeDeNumeros;
private int tamanhoDaAposta;
private int quantidadeDeApostas;
private List<List<Integer>> apostas;
public int getQuantidadeDeApostas() {
return quantidadeDeApostas;
}
public void setQuantidadeDeApostas(int quantidadeDeApostas) {
this.quantidadeDeApostas = quantidadeDeApostas;
}
public int getQuantidadeDeNumeros() {
return quantidadeDeNumeros;
}
public void setQuantidadeDeNumeros(int quantidadeDeNumeros) {
this.quantidadeDeNumeros = quantidadeDeNumeros;
}
public int getTamanhoDaAposta() {
return tamanhoDaAposta;
}
public void setTamanhoDaAposta(int tamanhoDaAposta) {
this.tamanhoDaAposta = tamanhoDaAposta;
}
public String geraApostas()
{
// Prepara uma lista com todos os números
ArrayList<Integer> numeros = new ArrayList<Integer>();
for (int j = 1; j <= this.quantidadeDeNumeros; j++)
{
numeros.add(j);
}
// Cria uma sublista da lista de números
List<Integer> subList = numeros.subList(0, this.tamanhoDaAposta);
// Lista de apostas vazia
this.apostas = new ArrayList<List<Integer>>();
// Gera as apostas
for (int i = 0; i < this.quantidadeDeApostas; i++)
{
Collections.shuffle(numeros);
List<Integer> aposta = new ArrayList<Integer>(subList);
this.apostas.add(aposta);
}
return "lista-de-apostas";
}
}
<!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"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Gerador de Apostas</title>
</h:head>
<h:body>
<ui:repeat var="aposta" value="#{geradorDeAposta.apostas}" varStatus="status">
<h:outputText value="Aposta #{status.index + 1}: "/>
<h:outputText value="#{aposta}"/>
<br/>
</ui:repeat>
</h:body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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/web-app_2_5.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
