命令按钮在primefaces和ui:define上不起作用

时间:2013-10-04 20:33:37

标签: spring jsf primefaces

所以,我有关于primefaces的问题,我正在尝试使用一个重置面板的按钮,但该按钮不起作用,这是代码。

<?xml version="1.0" encoding="utf-8" ?>
<ui:composition template="templatePortal.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:a="http://www.ambientinformatica.com.br/jsf2" xmlns:p="http://primefaces.org/ui">

<ui:define name="head">
    <style>
.col1 {
width: 10%;
}

.col2 {
width: 90%;
}
</style>
</ui:define>
<ui:define name="corpo">
    <a:field label="Ficha: ">
        <p:inputText id="ficha" label="ficha">

        </p:inputText>
    </a:field>

    <a:field label="Dotação: ">
        <p:inputMask id="dotacao" mask="99.99.9999.999.999.999" />
    </a:field>
    <a:field>


    </a:field>
    <a:newLine />

    <p:panel id="panel" header="Orçamento">
        <a:field label="Exercício">
            <p:inputText id="exercicio"></p:inputText>
        </a:field>

        <a:newLine />

        <a:field label="Unidade:">
            <p:inputText id="unidade" value="#{ElaboracaoOrcamentariaControl.unidade.codigo}" label="unidade">
                <p:ajax event="blur" listener="#{ElaboracaoOrcamentariaControl.validar}" update=":formCorpo:panel" />
            </p:inputText>
        </a:field>
        <a:field>
            <p:inputText id="nomeUnidade" value="#{ElaboracaoOrcamentariaControl.unidade.descricao}" style="width:550px;"></p:inputText>
        </a:field>
        <a:newLine />

        <a:field label="Orgão:">
            <p:inputText id="orgao" value="#{ElaboracaoOrcamentariaControl.orgao.codigo}">
                <p:ajax event="blur" listener="#{ElaboracaoOrcamentariaControl.validar}" update=":formCorpo:panel" />
            </p:inputText>
        </a:field>
        <a:field>
            <p:inputText id="nomeOrgao" value="#{ElaboracaoOrcamentariaControl.orgao.descricao}" style="width:550px;"></p:inputText>
        </a:field>
        <a:newLine />

        <a:field label="Função:">
            <p:inputText id="funcao" value="#{ElaboracaoOrcamentariaControl.funcao.id}" label="funcao">
                <p:ajax event="blur" listener="#{ElaboracaoOrcamentariaControl.validar}" update=":formCorpo:panel" />
            </p:inputText>
        </a:field>
        <a:field>
            <p:inputText id="nomeFuncao" value="#{ElaboracaoOrcamentariaControl.funcao.descricao}" style="width:550px;"></p:inputText>
        </a:field>
        <a:newLine />

        <a:field label="SubFunção:">
            <p:inputText id="subfuncao" value="#{ElaboracaoOrcamentariaControl.subFuncao.id}" label="subfuncao">
                <p:ajax event="blur" listener="#{ElaboracaoOrcamentariaControl.validar}" update=":formCorpo:panel" />
            </p:inputText>
        </a:field>
        <a:field>
            <p:inputText id="nomeSubfuncao" value="#{ElaboracaoOrcamentariaControl.subFuncao.descricao}" style="width:550px;"></p:inputText>
        </a:field>
        <a:newLine />

        <a:field label="Programa:">
            <p:inputText id="programa" value="#{ElaboracaoOrcamentariaControl.programa.codigo}" label="programa">
                <p:ajax event="blur" listener="#{ElaboracaoOrcamentariaControl.validar}" update=":formCorpo:panel" />
            </p:inputText>
        </a:field>
        <a:field>
            <p:inputText id="nomePrograma" value="#{ElaboracaoOrcamentariaControl.programa.descricao}" style="width:550px;"></p:inputText>
        </a:field>

        <a:newLine />

        <a:field label="Ação:">
            <p:inputText id="acao" value="#{ElaboracaoOrcamentariaControl.acao.nroProjAtiv}" label="acao">
                <p:ajax event="blur" listener="#{ElaboracaoOrcamentariaControl.validar}" update=":formCorpo:panel" />
            </p:inputText>
        </a:field>
        <a:field>
            <p:inputText id="nomeAcao" value="#{ElaboracaoOrcamentariaControl.acao.descricaoReduzida}" style="width:550px;"></p:inputText>
        </a:field>
        <a:newLine />

        <a:field label="elemento Despesa:">
            <p:inputText id="elementoDespesa" value="#{ElaboracaoOrcamentariaControl.elementoDespesa.codigo}" label="elementoDespesa">
                <p:ajax event="blur" listener="#{ElaboracaoOrcamentariaControl.validar}" update=":formCorpo:panel" />
            </p:inputText>
        </a:field>
        <a:field>
            <p:inputText id="nomeElementoDespesa" value="#{ElaboracaoOrcamentariaControl.elementoDespesa.descricao}" style="width:550px;"></p:inputText>
        </a:field>

        <a:newLine />
        <a:newLine />
        <a:newLine />
        <p:commandButton process="@this" immediate="true">
            <p:resetInput target=":formCorpo"/>

        </p:commandButton>

        <p:dataTable id="dataTable" var="fonte" value="#{ElaboracaoOrcamentariaControl.dotacao.fontes}">

            <p:column headerText="Fonte">
                <h:outputText value="#{fonte.fonte.codigo}" />
            </p:column>
            <p:column headerText="Descrição da fonte de recurso">
                <h:outputText value="#{fonte.fonte.descricao}" />
            </p:column>
            <p:column headerText="Valor">
                <h:outputText value="#{fonte.valor}" />
            </p:column>
            <p:column headerText="Excluir">
                <p:commandButton id="selectButton" update=":form:display" immediate="true" icon="ui-icon-search" title="View" process="@this">

                </p:commandButton>
            </p:column>
        </p:dataTable>
    </p:panel>


</ui:define>

和后面的bean:

package br.com.webgoverno.contabilidade.controle;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.ambientinformatica.ambientjsf.util.UtilFaces;
import br.com.ambientinformatica.jpa.exception.PersistenciaException;
import br.com.webgoverno.contabilidade.persistencia.AcaoDao;
import br.com.webgoverno.contabilidade.persistencia.DotacaoDao;
import br.com.webgoverno.contabilidade.persistencia.ElementoDespesaDao;
import br.com.webgoverno.contabilidade.persistencia.FuncaoDao;
import br.com.webgoverno.contabilidade.persistencia.SubFuncaoDao;
import br.com.webgoverno.orcamento.entidade.Acao;
import br.com.webgoverno.orcamento.entidade.Dotacao;
import br.com.webgoverno.orcamento.entidade.ElementoDespesa;
import br.com.webgoverno.orcamento.entidade.FonteDotacao;
import br.com.webgoverno.orcamento.entidade.Funcao;
import br.com.webgoverno.orcamento.entidade.OrcamentoException;
import br.com.webgoverno.orcamento.entidade.Orgao;
import br.com.webgoverno.orcamento.entidade.Programa;
import br.com.webgoverno.orcamento.entidade.SubFuncao;
import br.com.webgoverno.orcamento.entidade.UnidadeOrcamentaria;
import br.com.webgoverno.orcamento.persistencia.OrgaoDao;
import br.com.webgoverno.orcamento.persistencia.ProgramaDao;

@Controller("ElaboracaoOrcamentariaControl")
@Scope("conversation")
public class ElaboracaoOrcamentariaControl extends ControleContabilidade {

    private Dotacao             dotacao         = new Dotacao();

    // campos da tela

    private UnidadeOrcamentaria unidade;

    private Orgao               orgao;

    private Funcao              funcao;

    private SubFuncao           subFuncao;

    private Programa            programa;

    private Acao                acao;

    private ElementoDespesa     elementoDespesa;

    // fim campos da tela

    List<FonteDotacao>          fonteDotacoes   = new ArrayList<FonteDotacao>();

    private List<Dotacao>       dotacoes        = new ArrayList<Dotacao>();

    @Autowired
    private DotacaoDao          dotacaoDao;

    @Autowired
    private OrgaoDao            orgaoDao;

    @Autowired
    private FuncaoDao           funcaoDao;

    @Autowired
    private SubFuncaoDao        subFuncaoDao;

    @Autowired
    private ProgramaDao         programaDao;

    @Autowired
    private AcaoDao             acaoDao;

    @Autowired
    private ElementoDespesaDao  elementoDespesaDao;

    @PostConstruct
    public void inicializar() {

        unidade = new UnidadeOrcamentaria();

        orgao = new Orgao();

        funcao = new Funcao();

        subFuncao = new SubFuncao();

        programa = new Programa();

        acao = new Acao();

        elementoDespesa = new ElementoDespesa();

    }

    public Dotacao getDotacao() {

        return dotacao;
    }

    public void setDotacao(Dotacao dotacao) {

        this.dotacao = dotacao;
    }

    public UnidadeOrcamentaria getUnidade() {

        return unidade;
    }

    public void setUnidade(UnidadeOrcamentaria unidade) {

        this.unidade = unidade;
    }

    public Orgao getOrgao() {

        return orgao;
    }

    public void setOrgao(Orgao orgao) {

        this.orgao = orgao;
    }

    public Funcao getFuncao() {

        return funcao;
    }

    public void setFuncao(Funcao funcao) {

        this.funcao = funcao;
    }

    public SubFuncao getSubFuncao() {

        return subFuncao;
    }

    public void setSubFuncao(SubFuncao subFuncao) {

        this.subFuncao = subFuncao;
    }

    public Programa getPrograma() {

        return programa;
    }

    public void setPrograma(Programa programa) {

        this.programa = programa;
    }

    public Acao getAcao() {

        return acao;
    }

    public void setAcao(Acao acao) {

        this.acao = acao;
    }

    public ElementoDespesa getElementoDespesa() {

        return elementoDespesa;
    }

    public void setElementoDespesa(ElementoDespesa elementoDespesa) {

        this.elementoDespesa = elementoDespesa;
    }

    public List<Dotacao> getDotacoes() {

        return dotacoes;
    }

    public void setDotacoes(List<Dotacao> dotacoes) {

        this.dotacoes = dotacoes;
    }

    public DotacaoDao getDotacaoDao() {

        return dotacaoDao;
    }

    public void setDotacaoDao(DotacaoDao dotacaoDao) {

        this.dotacaoDao = dotacaoDao;
    }

    public void confirmar(ActionEvent evt) {

        unidade.setOrgao(orgao);
        programa.getAcoes().add(acao);

        dotacao.setUnidade(unidade);
        dotacao.setPrograma(programa);
        try {
            dotacaoDao.alterar(dotacao);
            UtilFaces.addMensagemFaces("Salvo com sucesso");

        } catch (Exception e) {
            UtilFaces.addMensagemFaces(e);
        }

    }

    public List<Dotacao> listarDotacoes() {

        try {
            this.dotacoes = dotacaoDao.listar();
        } catch (PersistenciaException e) {
            UtilFaces.addMensagemFaces(e);
        }
        return dotacoes;
    }

    public void pesquisaDotacao() {

        try {
            this.dotacao = dotacaoDao.consultar(this.dotacao);
        } catch (PersistenciaException e) {
            UtilFaces.addMensagemFaces(e);
        }
    }

    public void validar(AjaxBehaviorEvent event) {

        try {
            /*
             * if (unidade.getCodigo() != null &&
             * unidade.consultarPorCodigo(unidade).size() > 0) { orgao =
             * orgaoDao.consultarPorCodigo(orgao).get(0); }
             */
            if (orgao.getCodigo() != null && orgaoDao.consultarPorCodigo(orgao).size() > 0) {
                orgao = orgaoDao.consultarPorCodigo(orgao).get(0);
            } else orgao = new Orgao();

            if (funcao != null && (funcao.getId() != null) && (funcaoDao.consultar(funcao.getId()) != null)) {
                funcao = funcaoDao.consultar(funcao.getId());
            } else funcao = new Funcao();

            if (subFuncao != null && (subFuncao.getId() != null) && (subFuncaoDao.consultar(subFuncao.getId()) != null)) {
                subFuncao = subFuncaoDao.consultar(subFuncao.getId());
            } else subFuncao = new SubFuncao();

            if (programa.getCodigo() != null && programaDao.consultarPorCodigo(programa).size() > 0) {
                programa = programaDao.consultarPorCodigo(programa).get(0);
            } else programa = new Programa();

            if (acao.getNroProjAtiv() != null && acaoDao.consultarPorCodigo(acao).size() > 0) {
                acao = acaoDao.consultarPorCodigo(acao).get(0);
            } else acao = new Acao();

            if (elementoDespesa.getCodigo() != null && elementoDespesaDao.consultarPorCodigo(elementoDespesa).size() > 0) {
                elementoDespesa = elementoDespesaDao.consultarPorCodigo(elementoDespesa).get(0);
            } else elementoDespesa = new ElementoDespesa();

        } catch (OrcamentoException e) {
            UtilFaces.addMensagemFaces(e);
            e.printStackTrace();
        } catch (PersistenciaException e) {
            UtilFaces.addMensagemFaces(e);
            e.printStackTrace();
        }

    }

    public void adicionaFonte(FonteDotacao fonteDotacao) {

        fonteDotacoes.add(fonteDotacao);
    }

}

父模板中有一个表格被修改。 我被困在里面所以任何提示都会有所帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

此处解释了UICommand 无效的最常见原因:commandButton/commandLink/ajax action/listener method not invoked or input value not updated

从您给定的代码中,您的案例似乎属于案例1:组件可能不在<h:form>组件内。确保您的模板文件中有这样的结构:

<h:form>
    <ui:insert name="corpo" />
</h:form>

但请注意,这不是一个好方法,因为就像在页面中有一个神形式。如果在您的模板文件中,<ui:insert name="corpo" />没有任何形式,并且开始在页面内定义<h:form>,那将会更好。举个例子(基于你发布的Facelets代码):

<h:form>
    <p:dataTable id="dataTable" var="fonte" value="#{ElaboracaoOrcamentariaControl.dotacao.fontes}">

        <p:column headerText="Fonte">
            <h:outputText value="#{fonte.fonte.codigo}" />
        </p:column>
        <p:column headerText="Descrição da fonte de recurso">
            <h:outputText value="#{fonte.fonte.descricao}" />
        </p:column>
        <p:column headerText="Valor">
            <h:outputText value="#{fonte.valor}" />
        </p:column>
        <p:column headerText="Excluir">
            <p:commandButton id="selectButton" update=":form:display" immediate="true" icon="ui-icon-search" title="View" process="@this">

            </p:commandButton>
        </p:column>
    </p:dataTable>
</h:form>