Duvida com implementacao com ResquestScoped

9 respostas
jsfjavafront-end
T

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.

9 Respostas

R

Faltou o codigo do commandButton.

T

o codigo jsf some quando colo ele aqui

R

@thimor É uma situação que realmente eu nunca tinha passado.
Mas pesquisando achei muito exemplos usando o :

<p:commandButton title="Selecionar" action="#{produtoController.selecionar}"  icon="ui-icon-check">
    <f:param name="produto" value="#{produto}"/>
</p:commandButton>

E do lado da Controller se coloca @ManagedProperty("#{param.produto}"). Verifica estes valores via sysout no PostConstruct.
Lendo a documentação do setPropertyActionListener não vi nenhuma abordagem sobre restrição aos scope.
Ou voçê pode tentar

<p:commandButton title="Selecionar" action="#{produtoController.selecionar(produto)}"  icon="ui-icon-check" />

E assim alterar o método selecionar p/ receber produto.

T

Eu uso p:dialog mesmo com ajax. E esta funcionando direito. So que eu coloquei o projeto num servidor pago. E ele ta passando da quantidade de jvm que tenho. Dai quero colocar os mb como request para ver como fica o consumo de memoria. So que quando boto em request… A selecao dos objetos das listas dao esse problema de redirecionamento. Ele nao chama o metodo.

T

eu a principio estava usando com o f:para, porem não estava usando o @managedproperty vou testar dessa forma.

T

Eu dei mais umas pesquisadas e achei um topico daqui mesmo, do Hebert, falando que bibliotecas visuais como primefaces e richfaces nao funcionam no escopo de request. E comprovei tirando os componentes do primefaces da pagina e funcionou normalmente.

S

Fala meu amigo.

Tenta implementar Serializable.

Dê uma olhada no post abaixo, sobre escopo:

Parei com JSF, já deu. kkkk

Abraço

T

Ola,

O problema eh pq o data table do primefaces so funciona em view scoped. Testei tirando os compronentes do primefaces e funcionou em request sem problemas.

Vc esta usando o que agora no lugar do jsf?

J

Estuda qualquer outra coisa que nao seja baseado em componente do lado servidor. Spring Boot com Spring MVC é uma boa escolha para Java. Antes disso, caso não tenha se aprofundado, é necessário aprender HTTP/REST e consequentemente front-end HTML/CSS/JS.

Criado 5 de dezembro de 2016
Ultima resposta 12 de dez. de 2016
Respostas 9
Participantes 4