Ola, eu lembro que ja passei por isso, mas faz tempo, acabei resolvendo usando ViewScoped. Eu tenho uma pagina que lista produtos. Ao clicar no bota, redireciono para a pagina de alteracao de preco. Se eu definir o bean como requestscoped nao ao clicar no botao, ele nao chama o metodo selecionar(). Com o viewscoped como muda a pagina eu implementei dessa forma, gostaria de saber se é a forma correta. E se alguem souber porque o escopo de resquest nao executa a action.
`
@ManagedBean
@ViewScoped
public class ProdutoController {
private ProdutoService service = new ProdutoService();
private Produto produto;
private ProdutoLoja produtoLoja;
private List<Produto> produtos;
public ProdutoController() {
}
@PostConstruct
public void init() {
String idProduto = (String) FacesUtil.recuperarDoRequest("idProduto");
if (idProduto != null) {
produto = service.pesquisarPorID(new Integer(idProduto));
produtoLoja = service.pesquisarProdutoLoja(produto);
}
produtos = new ArrayList<>();
}
public String selecionar() {
FacesUtil.salvarNoRequest("idProduto", produto);
return "alteraPreco.faces";
}
}
`
A codigo da pagina do trecho onde o produto eh selecionado
`
<p:commandButton title="Selecionar" action="#{produtoController.selecionar()}" icon="ui-icon-check">
f:setPropertyActionListener value='#{produto}' target='#{produtoController.produto}'/>
</p:commandButton>
`
Eu pesquiso os produtos, seleciono no que eu quero alterar o preco. ele direciona para a pagina, eu altero o preco, salvo e retorno para a pagina de listagem. Isso tudo esta funcionando com o ViewScoped. Se eu colocar em Resquet, ao clicar no botao selecionar nao funciona.
Quero saber se essa implementacao do bean para ir de uma pagina para outra é a mais adequada.