@ManagedProperty jsf 2

3 respostas
Zenas

Olá amigos,

Estou concluíndo um cadastro com jsf 2 e primefaces 3, para realizar esse cadastro estou utilizando @ViewScoped no meu manager bean. Eu consigo incluir, deletar e consultar os meus dados, sendo que na hora de alterar os registros, eu vou para outra página, ai não consigo setar o meu objeto a ser alterado pelo componente <f:setPropertyActionListener, ele até seta o objeto, mas quando navega para outra tela, ele tira da sessão todo o meu manager bean, estou pensando em utilizar a anotação @ManagedProperty.

Alguém tem uma solução melhor ou essa é a melhor maneira de fazer esse tipo de trabalho com jsf 2.

Abraços amigos.

3 Respostas

dsystem

Zenas,

Isso acontece porque quando vc utiliza o @ViewScoped ele mantem a sessão somente na tela que vc está usando. Quando você faz a requisição para outra tela, a sessão é fechada…
Para que você consiga usar dessa forma, altere o @ViewScoped para @SessionScoped.

Att

Zenas

Olá amigo,

Mas se eu utilizar @SessionScoped eu vou colocar todo o meu managerbean na sessão do servidor o que é muito ruim para a aplicação. Vai funcionar momentaneamente, mas pra frente traz problemas maiores

Mas vlw pela dica.

Abraços

Zenas

Olá Amigos,

Consegui resolver o meu problema da seguinte forma descrita abaixo e com a ajuda do link: http://stackoverflow.com/questions/4386455/jsf-2-what-scope-should-i-use

// Método alterar do meu managerbear
@ViewScoped
@ManagedBean()
public class FuncionarioBean extends Controller<Trabalhador> implements Serializable {

    @PostConstruct
    public void init() {
		if ( ELFlash.getFlash().get("objeto") != null ){
			if ( ELFlash.getFlash().get("objeto") instanceof Trabalhador ){
				setT( (Trabalhador) ELFlash.getFlash().get("objeto") );
				ELFlash.getFlash().clear();
				
			}
			
		}
	}


	public String alterar() throws Exception{
		ELFlash.getFlash().put("objeto", getT());
		return super.goToAlterar( "/jsp/funcionario/inserir?faces-redirect=true&amp;includeViewParams=true" );
		
	}
No xhtml
<p:column>
				<f:facet name="header">  
	                <h:outputText value="Alterar" />  
	            </f:facet>
	            <center>
					<p:commandButton action="#{funcionarioBean.alterar}"
									 image="ui-icon ui-icon-pencil"
									 ajax="false">
						<f:setPropertyActionListener 	target="#{funcionarioBean.t}" 
														value="#{obj}" />
					</p:commandButton>
				</center>
			</p:column>
			
			<p:column>
				<f:facet name="header">  
	                <h:outputText value="Deletar" />  
	            </f:facet>
	            <center>
		            <p:commandButton 	onclick="confirmation.show()" 
		            					image="ui-icon ui-icon-trash">
		            	<f:setPropertyActionListener 	target="#{funcionarioBean.t}" 
														value="#{obj}" />
		            </p:commandButton>
		        </center>
			</p:column>
		
		</p:dataTable>

		<p:confirmDialog 	message="Você tem certeza que deseja excluir este Funcionário?"  
           					header="Confirmação" 
           					severity="alert" 
           					widgetVar="confirmation">
           	
        	<p:commandButton 	value="Excluir" 
        						update="funcionarioAsList" 
        						oncomplete="confirmation.hide()"  
                    			actionListener="#{funcionarioBean.remover}" 
                    			ajax="false"
                    			id="btnExcluir">
            </p:commandButton>  
        	
        	<p:commandButton 	value="Cancelar" 
        						onclick="confirmation.hide()" 
        						type="button" />  
     	</p:confirmDialog>		
	
	</h:body>
</html>

Abraços a todos

Criado 13 de setembro de 2011
Ultima resposta 13 de set. de 2011
Respostas 3
Participantes 2