selectEvent is null - PullRequest
       117

selectEvent is null

1 голос
/ 18 марта 2020

Ранее я использовал java ee 7 и glassfi sh 4, и мой код работал правильно. После переключения на Jakarta ee 8 и payara используемое selectEvent возвращает ноль. Следуйте приведенному ниже коду.

html

<sys:inputConverter convUpdate=":form1:mensagem" entidade="Religiao" 
                                                        objeto="#{alunoJsfBean.crudObj.religiao}" 
                                                        prepBuscaMetodo="#{bscBean.abrirPesquisaReligiao()}" />
.
.
.

inputConverter.x html

.
.
.
 <cc:interface componentType="br.com.systempro.conversores.InputConverterUIComponent">
        <cc:attribute name="dlgReturnListenner" method-signature="void java.lang.String listener(org.primefaces.event.SelectEvent)" />
    </cc:interface>
.
.
.
<p:commandButton id="btnPesquisar" value="#{cc.attrs.nameBtn}" icon="#{icon.pesquisar}" process="@this #{cc.attrs.prepBuscaProcess}" update="@this #{cc.attrs.prepBuscaUpdate}" actionListener="#{cc.attrs.prepBuscaMetodo}" disabled="#{cc.attrs.disabled}" title="Abrir Pesquisa" tabindex="-1" styleClass="styleClass">
                <p:ajax event="dialogReturn" listener="#{cc.attrs.dlgReturnListenner}" update="@parent #{cc.attrs.dialogReturnUpdate}"
                        oncomplete="PrimeFaces.focus('#{cc.clientId}:codigo');#{cc.attrs.dialogReturnOncomplete}" />
                <p:resetInput target="#{cc.clientId}:codigo" rendered="#{cc.attrs.resetInput}" />
            </p:commandButton>
.
.
.
...

InputConverterUIComponent. java

package br.com.systempro.conversores;

import br.com.systempro.beans.GerBean;
import br.com.systempro.utils.JsfUtil;
import java.util.ArrayList;
import java.util.List;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.component.FacesComponent;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIInput;
import javax.faces.component.UINamingContainer;
import javax.faces.context.FacesContext;

@FacesComponent("br.com.systempro.conversores.InputConverterUIComponent")
public class InputConverterUIComponent extends UIInput implements NamingContainer {

    @Override
    public String getFamily() {
        return UINamingContainer.COMPONENT_FAMILY;
    }

    public String getDescInput() {
        ELContext context = FacesContext.getCurrentInstance().getELContext();
        if (getValueExpression("objetoDesc") != null) {
            Object objetoDesc = getValueExpression("objetoDesc").getValue(context);
            if (objetoDesc != null) {
                return objetoDesc.toString();
            }
        }
        Object objeto = getValueExpression("objeto").getValue(context);
        if (objeto == null) {
            return "";
        }
        if (objeto instanceof List) {
            List<Object> objects = (List<Object>) objeto;
            if (objects.isEmpty()) {
                return "";
            } else if (objects.size() == 1) {
                return objects.get(0).toString();
            } else {
                return objects.size() + " Itens selecionados";
            }
        } else {
            return objeto.toString();
        }
    }

    public void selectObj(org.primefaces.event.SelectEvent event) {
        if (event.getObject() == null) {
            return;
        }
        ELContext context = FacesContext.getCurrentInstance().getELContext();
        ValueExpression ve = getValueExpression("objeto");
        if (event.getObject() instanceof List) {
            List<Object> lst = (List<Object>) event.getObject();
            List<Object> retorno = new ArrayList<>();
            for (Object value : lst) {
                retorno.add(value);
            }
            ve.setValue(context, retorno);
        } else {
            ve.setValue(context, event.getObject());
        }
        JsfUtil.getJsfBean(GerBean.class).getObjetosSelecionados().clear();
    }
}

В методе selectEvent событие пустое. Если я передам метод selectObj () непосредственно в прослушиватель ajax, он будет работать.

 <p:commandButton id="btnPesquisar" value="#{cc.attrs.nameBtn}" icon="#{icon.pesquisar}" process="@this #{cc.attrs.prepBuscaProcess}" update="@this #{cc.attrs.prepBuscaUpdate}" actionListener="#{cc.attrs.prepBuscaMetodo}" disabled="#{cc.attrs.disabled}" title="Abrir Pesquisa" tabindex="-1" styleClass="styleClass">
                <p:ajax event="dialogReturn" listener="#{cc.selectObj}" update="@parent #{cc.attrs.dialogReturnUpdate}"
                        oncomplete="PrimeFaces.focus('#{cc.clientId}:codigo');#{cc.attrs.dialogReturnOncomplete}" />
                <p:resetInput target="#{cc.clientId}:codigo" rendered="#{cc.attrs.resetInput}" />
            </p:commandButton>

Почему это происходит?

Primefaces 6.2 Jakarta ee 8 Payara 5.201

...