[RESOLVIDO]ajuda com FileUpload

Boa tarde, estou tentando fazer upload de varias imagens usando o file upload,
como para usar o file upload o scopo deve ser como session,
foi necessário fazer dois beams diferentes,
um com SessionScope e outro com RequestScope,
pq com sessionScope ou ViewScope, o file upload funciona mas o FacesContext.addMensage(…) não funciona para mandar mensagens a tela.

então não estou sabendo fazer o upload de varias imagens ao mesmo tempo.

segue os códigos para facilitar a ajuda.
CadastrarAnimal.xhtml

<h2>Cadastro de Animais</h2>
<h:messages style="color:red" />
<h:form id="tipoAnimal" >
	<h:inputHidden value="#{animalBean.animal.id_animal}" />
	<h:panelGrid columns="2" cellpadding="5" width="400" >
		<p:outputLabel value="Nome: " for="nome" styleClass="label"/>
		<p:inputText id="nome" label="Nome" value="#{animalBean.animal.nome}" required="true" requiredMessage="O campo Nome deve ser informado!" size="35" maxlength="30"/>	
		<p:outputLabel value="Sexo:" for="nome" styleClass="label"/>
		<p:selectOneRadio id="sexo" value="#{animalBean.animal.sexo}" required="true" requiredMessage="O campo Sexo deve ser informado!">
			<f:selectItems value="#{animalBean.sexo}" var="sexo" itemValue="#{sexo.codigo}" itemLabel="#{sexo.descricao}" />
		</p:selectOneRadio>
		<p:outputLabel value="Idade" for="idade" styleClass="label"/>
		<p:inputText id="idade" value="#{animalBean.animal.idade}" required="true" requiredMessage="O campo Idade deve ser informado!" />
		<p:outputLabel value="Descrição:" for="descricao" styleClass="label"/>
		<p:inputTextarea id="descricao"	value="#{animalBean.animal.descricao}" rows="7" cols="50" required="true" requiredMessage="O campo Descrição deve ser informado!" />						
		<h:outputLabel value="Fotos:" for="foto" />
		<p:fileUpload id="foto" fileUploadListener="#{fotoBean.uploadAction}"
				multiple="true"mode="advanced"   
			        allowTypes="/(\.|\/)(gif|jpe?g|png)$/" required="true"/>	
		<h:outputText/>
		<h:commandButton value="Inserir" action="#{animalBean.salvar()}" />
	</h:panelGrid>
</h:form>

FotoBeam

@ManagedBean(name="fotoBean")
@SessionScoped
public class FotoBean {
	private Foto foto = new Foto();
	private List<String> lista = new ArrayList<String>();
	private List<UploadArquivo> lista_arquivos = new ArrayList<UploadArquivo>();
	private UploadArquivo arquivo;
	
	public Foto getFoto() {
		return foto;
	}
	public void setFoto(Foto foto) {
		this.foto = foto;
	}
	//tenho que zerar a lista_arquivos ao terminar de jogar o mesmo na sessão pq ta só adicionando novos objetos a lista
	public void uploadAction (FileUploadEvent event){
		this.arquivo = new UploadArquivo();
		this.arquivo.fileUpload(event, "/resources/img/");
		this.lista_arquivos.add(arquivo);  
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("listaobjUpload", lista_arquivos);
	}
}

Upload arquivos

public class UploadArquivo {
	private String caminho;
	private byte[] arquivo;
	private String nome;

	public String getNome() {
		return nome;
	}

	public String getRealPath() {
		FacesContext aFacesContext = FacesContext.getCurrentInstance();
		ServletContext context = (ServletContext) aFacesContext.getExternalContext().getContext();
		return context.getRealPath("/");
	}

	public void fileUpload(FileUploadEvent event, String diretorio) {
		try {
			this.nome = event.getFile().getFileName();
			this.caminho = getRealPath() + diretorio + getNome();
			this.arquivo = event.getFile().getContents();
			File file = new File(getRealPath() + diretorio);
			file.mkdirs();
		} catch (Exception ex) {
			System.out.println("Erro no upload do arquivo" + ex);
		}
	}

	public void gravar() {
		try {
			FileOutputStream fos;// FileOutputStream gravam bytes em um arquivo.
			fos = new FileOutputStream(this.caminho);// se o caminho n existir ele sera criado
			fos.write(this.arquivo);// salva o arquivo passado no parametro
			fos.close();
		} catch (Exception ex) {
			System.out.println(ex);
		}
	}
}

AnimalBeam

@ManagedBean(name="animalBean")
@RequestScoped
public class AnimalBean {
	private Animal animal = new Animal();
	private List<Animal> animais;
	private EnumSexo[] sexo;
	private EnumPorte[] porte;
	private EnumTipo[] tipo;
	private Map<Integer, Boolean> selecionados = new HashMap<Integer, Boolean>();

	FacesContext contexto = FacesContext.getCurrentInstance();
	FacesMessage mensagem = null;
	
	.
	.
	Getters Setters
	.
	.
	//Actions
	public String salvar(){
		AnimalRN animalrn = new AnimalRN();
		
		//apagar apos os testes, pois este parametro deverá ser o usuário logado.
		Empresa empresa = new Empresa();
		empresa.setId_empresa(1);
		this.animal.setEmpresa(empresa);

		@SuppressWarnings("unchecked")
		List<UploadArquivo> arquivos = (List<UploadArquivo>) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("listaobjUpload");
		FotoRN fotoRN = new FotoRN();
		if(arquivos.size() >= 1){
			for (UploadArquivo arquivo: arquivos) {
				Foto foto = new Foto();
				foto.setAnimal(animal);
				foto.setNome(arquivo.getNome());
				fotoRN.salvar(foto);
				arquivo.gravar();
			}
		}
		animalrn.salvar(this.animal);
		this.animal = new Animal();
		mensagem = new FacesMessage("Cadastrado com sucesso!");
		contexto.addMessage(null, mensagem);
		return "ListaAnimais";
	}
}

Deste jeito ate funciona mas não consegui limpar a lista com as fotos a serem upadas, de forma que ao add uma foto nova ele insere as fotos que estavam na lista

qualquer ajuda será bem vinda…

resolvi limpando a criando uma nova instancia da lista ao carregar a página, mesmo assim creio que deve ter um outro jeito de se fazer upload de varias imagens sem fazer esta gambiarra, e se alguém quiser contribuir ficarei grato.