Error using <f:Event>

Asked

Viewed 86 times

0

I’m struggling with something that seems simple to solve, but I’ve already wasted considerable time on it, and I hope someone can help me.. , good. , in my View I use to call a method before rendering the screen pro user, but it presents the following message directed to

Method must have signature "void method(ComponentSystemEvent)" but has signature "void method()"

I already switched the jsf dependency to a lower version but still has the same problem(current version is 2.2.8), added the argument ComponentSystemEvent event in the method but not solved, follows the screen and the Bean..

package com.mwcc.pedidovenda.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.validation.constraints.NotNull;

import com.mwcc.pedidovenda.model.Categoria;
import com.mwcc.pedidovenda.model.Produto;
import com.mwcc.pedidovenda.repository.CategoriaRepository;
import com.mwcc.pedidovenda.service.CadastroProdutoService;
import com.mwcc.pedidovenda.util.jsf.FacesUtil;

@Named
@ViewScoped
public class CadastroProdutoBean implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Inject
    private CategoriaRepository categorias;

    @Inject
    private CadastroProdutoService cadastroProdutoService;

    private Produto produto;

    private Categoria categoriaPai;

    private List<Categoria> categoriasRaizes;
    private List<Categoria> subcategorias;

    public CadastroProdutoBean() {
        limpar();
    }

    public void salvar() {
        this.produto = cadastroProdutoService.salvar(this.produto);
        limpar();

        FacesUtil.addInfoMessage("Produto salvo com suceso!");
    }

    public void inicializar() {
        if (FacesUtil.isNotPostback()) {
            categoriasRaizes = categorias.raizes();

            if (this.categoriaPai != null) {
                carregarSubcategorias();
            }
        }

    }

    public void carregarSubcategorias() {
        subcategorias = categorias.subcategorias(categoriaPai);
    }

    private void limpar() {
        this.produto = new Produto();
        this.categoriaPai = new Categoria();
        this.subcategorias = new ArrayList<>();
        this.categoriasRaizes = new ArrayList<>();
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {

        this.produto = produto;
        if (this.produto != null) {
            this.categoriaPai = this.produto.getCategoria().getCategoriaPai();
        }

    }

    public List<Categoria> getCategoriasRaizes() {
        return categoriasRaizes;
    }

    public List<Categoria> getSubcategorias() {
        return subcategorias;
    }

    @NotNull
    public Categoria getCategoriaPai() {
        return categoriaPai;
    }

    public void setCategoriaPai(Categoria categoriaPai) {
        this.categoriaPai = categoriaPai;
    }

}

    <ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:o="http://omnifaces.org/ui">

    <ui:define name="titulo">Novo produto</ui:define>

    <ui:define name="corpo">
        <f:metadata>
            <o:viewParam name="produto" value="#{cadastroProdutoBean.produto}" />
            <f:event listener="#{cadastroProdutoBean.inicializar}" type="PreRenderView"></f:event>
        </f:metadata>

        <h:form>
            <h1>Novo produto</h1>

            <p:messages autoUpdate="true" closable="true" />

            <p:toolbar style="margin-top: 20px">
                <p:toolbarGroup>
                    <p:button value="Novo" outcome="/produtos/CadastroProduto" />
                    <p:commandButton value="Salvar" id="botaoSalvar"
                        action="#{cadastroProdutoBean.salvar}" update="@form" />
                </p:toolbarGroup>

                <p:toolbarGroup align="right">
                    <p:button value="Pesquisa" outcome="/produtos/PesquisaProdutos" />
                </p:toolbarGroup>
            </p:toolbar>

            <p:panelGrid columns="2" id="painel"
                style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo">
                <p:outputLabel value="SKU" for="sku" />
                <p:inputText id="sku" size="20" maxlength="20"
                    value="#{cadastroProdutoBean.produto.sku}" />

                <p:outputLabel value="Nome" for="nome" />
                <p:inputText id="nome" size="60" maxlength="80"
                    value="#{cadastroProdutoBean.produto.nome}" />

                <p:outputLabel value="Categoria" for="categoria" />
                <p:selectOneMenu id="categoria"
                    value="#{cadastroProdutoBean.categoriaPai}">
                    <f:selectItem itemLabel="Selecione a categoria" />
                    <f:selectItems var="categoria"
                        value="#{cadastroProdutoBean.categoriasRaizes}"
                        itemLabel="#{categoria.descricao}" itemValue="#{categoria}" />
                    <p:ajax listener="#{cadastroProdutoBean.carregarSubcategorias}"
                        update="subCategoria" />
                </p:selectOneMenu>

                <p:outputLabel value="Subcategoria" for="subCategoria" />
                <p:selectOneMenu id="subCategoria"
                    value="#{cadastroProdutoBean.produto.categoria}">
                    <f:selectItem itemLabel="Selecione a subcategoria" />
                    <f:selectItems var="subcategoria"
                        value="#{cadastroProdutoBean.subcategorias}"
                        itemLabel="#{subcategoria.descricao}" itemValue="#{subcategoria}" />
                </p:selectOneMenu>

                <p:outputLabel value="Valor unitário" for="valUnitario" />
                <p:inputText id="valUnitario" size="10" maxlength="10"
                    styleClass="moeda"
                    value="#{cadastroProdutoBean.produto.valorUnitario}">
                    <f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
                </p:inputText>

                <p:outputLabel value="Estoque" for="estoque" />
                <p:inputText id="estoque"
                    value="#{cadastroProdutoBean.produto.quantidadeEstoque}" size="10"
                    maxlength="5" />
            </p:panelGrid>
        </h:form>
    </ui:define>
</ui:composition>

1 answer

0

The error log helps you solve the problem: Method must have Signature "void method(Componentsystemevent)" but has Signature "void method()"

Try rewriting the method with the following signature:

 public void inicializar(ComponentSystemEvent event) {...}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.