JSF e Weld CDI

Bom dia Pessoal,
Estou com uma dúvida na segunte situação:

Tenho minha página JSF com um form de cadastro:

<h:form id="formCadastroSetor">
					<p:dialog resizable="false" modal="true" draggable="false" closable="false" position="center"
						header="..::: Novo Modelo - [ * Campo obrigatório ]" widgetVar="dialogCadSetor">
						
						<h:panelGrid id="gradeSetor" columns="1" style="width:650px;">
							<p:fieldset>
								<h:panelGrid columns="4">
									<h:outputLabel value="Nome:"/><h:outputLabel value="*" style="color:red;"/>
									<p:inputText id="idNome" maxlength="100" style="width:300px;" required="true" 
										requiredMessage="Campo Obrigatório"	value="#{setor.facade.setor.nome}" />
									<p:message for="idNome"/>
									
									<h:outputLabel value="Descrição:"/><h:outputLabel value="*" style="color:red;"/>
									<p:inputText id="idDescricao" maxlength="255" style="width:300px;" required="true" 
										requiredMessage="Campo Obrigatório"	value="#{setor.facade.setor.descricao}" />
									<p:message for="idDescricao"/>
								</h:panelGrid>
							</p:fieldset>	
						</h:panelGrid>
					
						<p:commandButton value="Salvar" icon="ui-icon-disk" actionListener="#{setor.saveSetor}"
							update=":formTabelaSetor:tabelaSetor :formCadastroSetor:gradeSetor :formMensage">
                                                         <f:setPropertyActionListener target="#{setor.facade.setor}" value="#{null}"/>
                                                 </p:commandButton>
						<p:commandButton value="Sair" icon="ui-icon-close" oncomplete="dialogCadSetor.hide()"/>
				</p:dialog>
			</h:form>

Bean:

@Named(value="setor")
@SessionScoped
public class SetorBean {
	@Inject private SetorFacade facade;
	
	public SetorFacade getFacade() {
		return facade;
	}
	
	public void saveSetor(ActionEvent event) {
		getFacade().save();
	}
}

Facade:

public class SetorFacade {
	@Inject private Setor setor;
	@Inject private Session session;
	
	public Setor getSetor() {
		return setor;
	}
	
	public void setSetor(Setor setor) {
		this.setor = setor;
	}

	public void save() {
		if(setor != null) {
			try {
				GenericDAO<Setor> dao = new GenericDAO<Setor>(session);
				dao.save(getSetor());
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
						FacesMessage.SEVERITY_INFO, "Setor salvo com sucesso!", ""));
			} catch (Exception e) {
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
						FacesMessage.SEVERITY_ERROR, " Problema ao salvar setor!", ""));
			}
		}
	}
}

O que acontece é que preciso setar o meu objeto setor como null para limpar meu formulário, mais ao tentar inserir um outro setor ele me retorno o setor null,
eu coloquei meu facade como scope de request, deu certo, mas faço mais duas operaçẽs neste facade que é de update e delete e usando como scope de request
elenão consegui fazer estas operações pois é feita duas requisiçoes e meu objeto selecionado fica null.
Bom o que eu queria ver, era como eu falaria para o weld injetar este objeto quando estevesse null.

com escopo de request você consegue pois ele faz o fluxo e no final ele exclui tudo que estiver na transação usa um metodo pra setar todos os campos para null por exemplo:

public void clear(){
   this.campo1 = null;
   this.campo2 = null;
   this.campo3 = null;
}

e no seu metodo save() você chama o metódo clear no final depois do redirect, talvez você tenha que mudar o scope pra conversation, não me recordo bem dos escopos de pagina.

leobmx,

Com o SCOPE de REQUEST eu consigo fazer sem problema, mas o problema e minhas outras duas operações de update e delete que nao vão funcionar.
Eu fiço com scope de conversation para seguir o mesmo de um VIEWSCOPE de JSF mas não funcionou.

No Weld CDI, não teria uma forma de falar que se o objeto me retornar null ele fazer uma nova instancia?

mas usando o metódo clear no caso você só vai setar após concluir sua transação, nesse momento você vai ter os dados e persistir só depois você seta o setor para nulo para limpar o formulário, ai você trata se setor for nulo você cria um novo.

leobmx,
Fazendo assim perde o objetivo de usar WELD CDI, porquer terei de dar um NEW no meu get para retornar uma nova instancia para o JSF. E isso deve ser feito pelo o Weld.

bom, eu to usando weld, jsf2 e primefaces num projeto aqui e nunca me deparei com esse problema ao meu ponto de vista isso funcionaria mas como você falou ele vai perder a relação se você setar para nulo.

[quote=leobmx]com escopo de request você consegue pois ele faz o fluxo e no final ele exclui tudo que estiver na transação usa um metodo pra setar todos os campos para null por exemplo:

public void clear(){
   this.campo1 = null;
   this.campo2 = null;
   this.campo3 = null;
}

e no seu metodo save() você chama o metódo clear no final depois do redirect, talvez você tenha que mudar o scope pra conversation, não me recordo bem dos escopos de pagina.[/quote]

Bom acho que essa não e a forma mais correta de se tratar essa situação… vinde se ao invés de você gravar os dados no banco você deseja adicionar seu objetos em uma lista pra só depois você abrir uma trasação com o banco e assim persistir seu dados, dessa forma você sempre terá um só objeto na sua lista por que as referências ao objeto Setor será sempre a mesma.
O problema que o Tiago esta tendo e em como destruir um objeto gerenciado pelo CDI (Weld) sem que seja necessário destruir todo o seu Scope, e logo após destrui-lo o próprio Weld o cria-lo novamente.