好吧,我有一个selectOneMenu组件(primefaces)加载另一个selectOneMenu,见下文:
<h:outputLabel value="Tabela: *" />
<p:selectOneMenu id="selectOneMenuTabela"
converter="entityConverter"
value="#{orcamentoMB.tabelaSelecionada}" effect="fade"
required="true" requiredMessage="A Tabela é obrigatória">
<f:selectItem itemLabel="Selecione uma Tabela" itemValue="" />
<f:selectItems value="#{orcamentoMB.tabelas}" var="tabela"
itemLabel="#{tabela.nome}" itemValue="#{tabela}" />
<p:ajax event="change" update="selectOneMenuProcedimento" />
</p:selectOneMenu>
<h:outputText value="Procedimento: *" />
<p:selectOneMenu id="selectOneMenuProcedimento"
converter="entityConverter" filter="true"
filterMatchMode="contains"
value="#{orcamentoMB.itemTabelaProcedimentoSelecionado}"
effect="fade" required="true"
requiredMessage="O procedimento é obrigatório">
<f:selectItem itemLabel="Selecione um Procedimento" itemValue="" />
<f:selectItems value="#{orcamentoMB.tabelaSelecionada.itens}"
var="item" itemLabel="#{item.procedimento.nome}"
itemValue="#{item}" />
<p:ajax event="change"
update="localAplicacao, selectOneMenuDente, selectOneMenuFace" />
</p:selectOneMenu>
所以,当第一个SelectOneMenu更改时,第二个被加载,但是当发生这种情况时,再次调用PostConstruct方法,我不知道为什么。我正在使用带有@PostConstruct anotation的Abstract类,seE:
@PostConstruct
public void postConstruct() {
logger.info("Iniciando PostConstruct...");
init();
// CampoPesquisa.clear();
String action = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
.get("action");
if (action != null) {
if (action.equals("alterar")) {
String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
.get("id");
buscarBean(Integer.valueOf(id));
alterar();
} else if (action.equals("novo")) {
novo();
}
} else {
buscarBeans();
}
}
在我的混凝课里,我这样做:
@Override
public void init() {
dentistas = (List<Dentista>) boPadrao
.findByNamedQuery(Dentista.FIND_ALL_COMPLETO);
pacientes = (List<Paciente>) boPadrao
.findByNamedQuery(Paciente.FIND_ALL_COMPLETO);
situacoes = (List<SituacaoOrcamento>) boPadrao
.findByNamedQuery(SituacaoOrcamento.FIND_ALL);
tabelas = (List<TabelaProcedimento>) boPadrao
.findByNamedQuery(TabelaProcedimento.FIND_ALL_SIMPLES);
cartoesCredito = (List<CartaoCredito>) boPadrao
.findByNamedQuery(CartaoCredito.FIND_ALL);
formasPagamento = (List<FormaPagamento>) boPadrao
.findByNamedQuery(FormaPagamento.FIND_ALL);
tabelasProtese = (List<TabelaProtese>) boPadrao
.findByNamedQuery(TabelaProtese.FIND_ALL_SIMPLES);
ParametroSistema param = (ParametroSistema) parametroSistemaHelper
.getParametroByCodigo("MAXIMO_DESCONTO").get(0);
maxDesconto = Double.valueOf(param.getValor_campo1().toString())
.doubleValue();
// Checa se foi passada a ação de "pagar"
String action = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
.get("action");
if (action != null && action.equals("pagar")) {
Integer id = Integer.valueOf(FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get("id"));
iniciarPagamento(id);
}
}
我对JSF的LifeCycle进行了调试,并且我注意到在更改了First SelectOneMenu之后,在“RestoView”阶段调用了@PostConstruct。
看到:
START PHASE RESTORE_VIEW 1
INFO 06/03/2014 23:23:26 [br.com.odontonew.mb.BasicCrudMBNewImpl:257] - Iniciando PostConstruct...
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:71] - Procurando pela namedQuery Dentista.findAllCompleto sem nenhum parametro
Hibernate: select dentista0_.id as id36_0_, pessoafisi1_.id as id2_1_, estadocivi2_.id as id0_2_, sexo3_.id as id0_3_, uf4_.id as id0_4_, dentista0_.caixa_saldo_atual as caixa2_36_0_, dentista0_.cro as cro36_0_, dentista0_.id_pessoa_fisica as id4_36_0_, pessoafisi1_1_.bairro as bairro2_1_, pessoafisi1_1_.cep as cep2_1_, pessoafisi1_1_.cidade as cidade2_1_, pessoafisi1_1_.complemento as compleme5_2_1_, pessoafisi1_1_.data_cadastro as data6_2_1_, pessoafisi1_1_.email as email2_1_, pessoafisi1_1_.endereco as endereco2_1_, pessoafisi1_1_.foto as foto2_1_, pessoafisi1_1_.nome as nome2_1_, pessoafisi1_1_.observacao as observacao2_1_, pessoafisi1_1_.operadora_telefone_1 as operadora12_2_1_, pessoafisi1_1_.operadora_telefone_2 as operadora13_2_1_, pessoafisi1_1_.operadora_telefone_3 as operadora14_2_1_, pessoafisi1_1_.id_situacao as id18_2_1_, pessoafisi1_1_.telefone1 as telefone15_2_1_, pessoafisi1_1_.telefone2 as telefone16_2_1_, pessoafisi1_1_.telefone3 as telefone17_2_1_, pessoafisi1_1_.id_uf as id19_2_1_, pessoafisi1_.cpf as cpf28_1_, pessoafisi1_.data_nascimento as data2_28_1_, pessoafisi1_.id_estado_civil as id5_28_1_, pessoafisi1_.rg as rg28_1_, pessoafisi1_.id_sexo as id6_28_1_, estadocivi2_.codigo as codigo0_2_, estadocivi2_.descricao as descricao0_2_, estadocivi2_.tipo as tipo0_2_, sexo3_.codigo as codigo0_3_, sexo3_.descricao as descricao0_3_, sexo3_.tipo as tipo0_3_, uf4_.codigo as codigo0_4_, uf4_.descricao as descricao0_4_, uf4_.tipo as tipo0_4_ from dentista dentista0_ inner join pessoa_fisica pessoafisi1_ on dentista0_.id_pessoa_fisica=pessoafisi1_.id inner join pessoa pessoafisi1_1_ on pessoafisi1_.id=pessoafisi1_1_.id inner join lov estadocivi2_ on pessoafisi1_.id_estado_civil=estadocivi2_.id inner join lov sexo3_ on pessoafisi1_.id_sexo=sexo3_.id inner join lov uf4_ on pessoafisi1_1_.id_uf=uf4_.id order by pessoafisi1_1_.nome
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:78] - Objetos Encontrados: 5
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:71] - Procurando pela namedQuery Paciente.findAllCompleto sem nenhum parametro
Hibernate: select paciente0_.id as id7_0_, pessoafisi1_.id as id2_1_, paciente0_.alergias as alergias7_0_, paciente0_.anestesia as anestesia7_0_, paciente0_.caixa_saldo_atual as caixa4_7_0_, paciente0_.id_dentista as id13_7_0_, paciente0_.diabetico as diabetico7_0_, paciente0_.doenca_coracao as doenca6_7_0_, paciente0_.gravida as gravida7_0_, paciente0_.hemorragia as hemorragia7_0_, paciente0_.hipertenso as hipertenso7_0_, paciente0_.id_indicado_por as id14_7_0_, paciente0_.medicamentos as medicam10_7_0_, paciente0_.outros_anamnese as outros11_7_0_, paciente0_.id_pessoa_fisica as id15_7_0_, paciente0_.id_tipo_indicacao as id16_7_0_, paciente0_.tratamento_medico as tratamento12_7_0_, pessoafisi1_1_.bairro as bairro2_1_, pessoafisi1_1_.cep as cep2_1_, pessoafisi1_1_.cidade as cidade2_1_, pessoafisi1_1_.complemento as compleme5_2_1_, pessoafisi1_1_.data_cadastro as data6_2_1_, pessoafisi1_1_.email as email2_1_, pessoafisi1_1_.endereco as endereco2_1_, pessoafisi1_1_.foto as foto2_1_, pessoafisi1_1_.nome as nome2_1_, pessoafisi1_1_.observacao as observacao2_1_, pessoafisi1_1_.operadora_telefone_1 as operadora12_2_1_, pessoafisi1_1_.operadora_telefone_2 as operadora13_2_1_, pessoafisi1_1_.operadora_telefone_3 as operadora14_2_1_, pessoafisi1_1_.id_situacao as id18_2_1_, pessoafisi1_1_.telefone1 as telefone15_2_1_, pessoafisi1_1_.telefone2 as telefone16_2_1_, pessoafisi1_1_.telefone3 as telefone17_2_1_, pessoafisi1_1_.id_uf as id19_2_1_, pessoafisi1_.cpf as cpf28_1_, pessoafisi1_.data_nascimento as data2_28_1_, pessoafisi1_.id_estado_civil as id5_28_1_, pessoafisi1_.rg as rg28_1_, pessoafisi1_.id_sexo as id6_28_1_ from paciente paciente0_ inner join pessoa_fisica pessoafisi1_ on paciente0_.id_pessoa_fisica=pessoafisi1_.id inner join pessoa pessoafisi1_1_ on pessoafisi1_.id=pessoafisi1_1_.id order by pessoafisi1_1_.nome
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:78] - Objetos Encontrados: 5
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:71] - Procurando pela namedQuery SituacaoOrcamento.findAll sem nenhum parametro
Hibernate: select situacaoor0_.id as id0_, situacaoor0_.codigo as codigo0_, situacaoor0_.descricao as descricao0_, situacaoor0_.tipo as tipo0_ from lov situacaoor0_ where situacaoor0_.tipo=10 order by situacaoor0_.descricao
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:78] - Objetos Encontrados: 5
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:71] - Procurando pela namedQuery TabelaProcedimento.findAllSimples sem nenhum parametro
Hibernate: select tabelaproc0_.id as id9_, tabelaproc0_.nome as nome9_, tabelaproc0_.observacao as observacao9_ from tabela_procedimento tabelaproc0_ order by tabelaproc0_.nome
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:78] - Objetos Encontrados: 2
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:71] - Procurando pela namedQuery CartaoCredito.findAll sem nenhum parametro
Hibernate: select cartaocred0_.id as id31_, cartaocred0_.bandeira as bandeira31_, cartaocred0_.numero_maximo_parcelas as numero3_31_, cartaocred0_.taxa_maxima_desconto as taxa4_31_, cartaocred0_.valor_minimo_parcela as valor5_31_ from cartao_credito cartaocred0_ order by cartaocred0_.bandeira
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:78] - Objetos Encontrados: 3
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:71] - Procurando pela namedQuery FormaPagamento.findAll sem nenhum parametro
Hibernate: select formapagam0_.id as id0_, formapagam0_.codigo as codigo0_, formapagam0_.descricao as descricao0_, formapagam0_.tipo as tipo0_ from lov formapagam0_ where formapagam0_.tipo=12 order by formapagam0_.descricao
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:78] - Objetos Encontrados: 4
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:71] - Procurando pela namedQuery TabelaProtese.findAllSimples sem nenhum parametro
Hibernate: select tabelaprot0_.id as id6_, tabelaprot0_.nome as nome6_, tabelaprot0_.observacao as observacao6_, tabelaprot0_.id_protetico as id4_6_ from tabela_protese tabelaprot0_ order by tabelaprot0_.nome
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:78] - Objetos Encontrados: 1
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:114] - Procurando pela query: SELECT c FROM ParametroSistema c WHERE c.codigo = :codigo
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:123] - Param: codigo, Value: MAXIMO_DESCONTO
Hibernate: select parametros0_.id as id15_, parametros0_.codigo as codigo15_, parametros0_.descricao as descricao15_, parametros0_.descricao_campo1 as descricao4_15_, parametros0_.descricao_campo2 as descricao5_15_, parametros0_.descricao_campo3 as descricao6_15_, parametros0_.valor_campo1 as valor7_15_, parametros0_.valor_campo2 as valor8_15_, parametros0_.valor_campo3 as valor9_15_ from parametro_sistema parametros0_ where parametros0_.codigo=?
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:131] - Objetos Encontrados: 1
INFO 06/03/2014 23:23:26 [br.com.odontonew.mb.BasicCrudMBNewImpl:212] - Buscando beans sem filtro
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:71] - Procurando pela namedQuery Orcamento.findAllCompleto sem nenhum parametro
Hibernate: select orcamento0_.id as id14_0_, dentista1_.id as id36_1_, paciente2_.id as id7_2_, usuario3_.id as id12_3_, situacaoor4_.id as id0_4_, orcamento0_.data_emissao as data2_14_0_, orcamento0_.data_validade as data3_14_0_, orcamento0_.id_dentista_orcou as id8_14_0_, orcamento0_.desconto as desconto14_0_, orcamento0_.observacoes as observac5_14_0_, orcamento0_.id_paciente as id9_14_0_, orcamento0_.id_situacao as id10_14_0_, orcamento0_.total_geral as total6_14_0_, orcamento0_.total_pago as total7_14_0_, orcamento0_.id_usuario as id11_14_0_, dentista1_.caixa_saldo_atual as caixa2_36_1_, dentista1_.cro as cro36_1_, dentista1_.id_pessoa_fisica as id4_36_1_, paciente2_.alergias as alergias7_2_, paciente2_.anestesia as anestesia7_2_, paciente2_.caixa_saldo_atual as caixa4_7_2_, paciente2_.id_dentista as id13_7_2_, paciente2_.diabetico as diabetico7_2_, paciente2_.doenca_coracao as doenca6_7_2_, paciente2_.gravida as gravida7_2_, paciente2_.hemorragia as hemorragia7_2_, paciente2_.hipertenso as hipertenso7_2_, paciente2_.id_indicado_por as id14_7_2_, paciente2_.medicamentos as medicam10_7_2_, paciente2_.outros_anamnese as outros11_7_2_, paciente2_.id_pessoa_fisica as id15_7_2_, paciente2_.id_tipo_indicacao as id16_7_2_, paciente2_.tratamento_medico as tratamento12_7_2_, usuario3_.login as login12_3_, usuario3_.id_pessoa_fisica as id4_12_3_, usuario3_.senha as senha12_3_, situacaoor4_.codigo as codigo0_4_, situacaoor4_.descricao as descricao0_4_, situacaoor4_.tipo as tipo0_4_ from orcamento orcamento0_ inner join dentista dentista1_ on orcamento0_.id_dentista_orcou=dentista1_.id inner join paciente paciente2_ on orcamento0_.id_paciente=paciente2_.id left outer join usuario usuario3_ on orcamento0_.id_usuario=usuario3_.id inner join lov situacaoor4_ on orcamento0_.id_situacao=situacaoor4_.id order by orcamento0_.data_emissao desc
INFO 06/03/2014 23:23:26 [br.com.odontonew.dao.BasicDAOImpl:78] - Objetos Encontrados: 11
END PHASE RESTORE_VIEW 1
START PHASE APPLY_REQUEST_VALUES 2
END PHASE APPLY_REQUEST_VALUES 2
START PHASE PROCESS_VALIDATIONS 3
END PHASE PROCESS_VALIDATIONS 3
START PHASE UPDATE_MODEL_VALUES 4
END PHASE UPDATE_MODEL_VALUES 4
START PHASE INVOKE_APPLICATION 5
END PHASE INVOKE_APPLICATION 5
START PHASE RENDER_RESPONSE 6
Hibernate: select itens0_.id_tabela_procedimento as id4_1_, itens0_.id as id1_, itens0_.id as id19_0_, itens0_.id_procedimento as id3_19_0_, itens0_.id_tabela_procedimento as id4_19_0_, itens0_.valor as valor19_0_ from item_tabela_procedimento itens0_ where itens0_.id_tabela_procedimento=?
Hibernate: select procedimen0_.id as id26_0_, procedimen0_.cor_hexa as cor2_26_0_, procedimen0_.id_especialidade as id5_26_0_, procedimen0_.id_local_aplicacao as id6_26_0_, procedimen0_.nome as nome26_0_, procedimen0_.sobre_procedimento as sobre4_26_0_ from procedimento procedimen0_ where procedimen0_.id=?
Hibernate: select procedimen0_.id as id26_0_, procedimen0_.cor_hexa as cor2_26_0_, procedimen0_.id_especialidade as id5_26_0_, procedimen0_.id_local_aplicacao as id6_26_0_, procedimen0_.nome as nome26_0_, procedimen0_.sobre_procedimento as sobre4_26_0_ from procedimento procedimen0_ where procedimen0_.id=?
Hibernate: select procedimen0_.id as id26_0_, procedimen0_.cor_hexa as cor2_26_0_, procedimen0_.id_especialidade as id5_26_0_, procedimen0_.id_local_aplicacao as id6_26_0_, procedimen0_.nome as nome26_0_, procedimen0_.sobre_procedimento as sobre4_26_0_ from procedimento procedimen0_ where procedimen0_.id=?
Hibernate: select procedimen0_.id as id26_0_, procedimen0_.cor_hexa as cor2_26_0_, procedimen0_.id_especialidade as id5_26_0_, procedimen0_.id_local_aplicacao as id6_26_0_, procedimen0_.nome as nome26_0_, procedimen0_.sobre_procedimento as sobre4_26_0_ from procedimento procedimen0_ where procedimen0_.id=?
Hibernate: select procedimen0_.id as id26_0_, procedimen0_.cor_hexa as cor2_26_0_, procedimen0_.id_especialidade as id5_26_0_, procedimen0_.id_local_aplicacao as id6_26_0_, procedimen0_.nome as nome26_0_, procedimen0_.sobre_procedimento as sobre4_26_0_ from procedimento procedimen0_ where procedimen0_.id=?
END PHASE RENDER_RESPONSE 6
我的ManagedBean是“@ViewScoped”,我几乎尝试了一切,但我不知道是什么问题。
SOLUTION:
我刚刚将我的JSF版本从2.0升级到2.2.4,一切正常。