Jsf 2 在操作之前触发的preRenderView事件

Jsf 2 在操作之前触发的preRenderView事件,jsf-2,primefaces,Jsf 2,Primefaces,我的预渲染视图事件有点麻烦。我的页面也使用commandbutton来提交数据,但不幸的是,preRenderView事件总是在按钮操作被调用之前被调用 <h:body style="width:600px; "> <ui:composition template="/common/master-layout.xhtml"> <ui:define name="title">#{message['app.page.main.title']}</ui

我的预渲染视图事件有点麻烦。我的页面也使用commandbutton来提交数据,但不幸的是,preRenderView事件总是在按钮操作被调用之前被调用

<h:body style="width:600px; ">
<ui:composition template="/common/master-layout.xhtml">
    <ui:define name="title">#{message['app.page.main.title']}</ui:define>
    <ui:debug
        rendered="#{initParam['javax.faces.PROJECT_STAGE'] eq 'Development'}"
        hotkey="x" />
    <ui:define name="metadata">
        <f:metadata>
            <f:viewParam name="id" value="#{saisieDevisController.idDemande}" />
            <f:event type="preRenderView"
                listener="#{saisieDevisController.init}" />
        </f:metadata>
    </ui:define>
    <ui:define name="content">
        <p:fieldset legend="Programme" style="margin-top: 20px;">

            <h:form id="etudeDemSaisieDevisForm">

                <p:tabView id="etudeDemSaisieDevisTabView">

                    <p:tab id="programmeTab" title="Programme">

                        <h:panelGrid columns="4" cellpadding="10">

                            <h:outputText id="programmeInput" value="Programme"
                                style="font-weight:bold" />
                            <h:outputText for="programmeInput"
                                value="#{saisieDevisController.selectedDemande.idProgramme.codeProgImmobilier}" />

                            <h:outputText id="lotInput" value="Lot" style="font-weight:bold" />
                            <h:outputText for="lotInput"
                                value="#{saisieDevisController.selectedDemande.idBien.numLotCommercial}" />

                            <h:outputText id="nomAcqInput" value="Nom Acquereur"
                                style="font-weight:bold" />
                            <h:outputText for="nomAcqInput"
                                value="#{saisieDevisController.selectedDemande.idAcquereur.genreEtatCivil} #{saisieDevisController.selectedDemande.idAcquereur.prenomAcquereur} #{saisieDevisController.selectedDemande.idAcquereur.nomAcquereur}" />

                        </h:panelGrid>
                    </p:tab>

                    <p:tab id="datesFraisTab" title="Dates et frais">

                        <h:panelGrid columns="4" cellpadding="10">

                            <h:outputLabel value="Date de valité de devis"
                                style="font-weight:bold" />
                            <p:calendar
                                value="#{saisieDevisController.selectedDemande.lastDevis.datValidite}"
                                id="dateValiditeDevis" showOn="button" required="true">
                                <f:convertDateTime pattern="dd/MM/yyyy" />
                            </p:calendar>


                            <h:outputLabel value="Date butoire de chantier"
                                style="font-weight:bold" />
                            <p:calendar
                                value="#{saisieDevisController.selectedDemande.lastDevis.dateButoire}"
                                id="dateButoireDevis" showOn="button" required="true">
                                <f:convertDateTime pattern="dd/MM/yyyy" />
                            </p:calendar>

                            <h:outputText value="Frais de dossier" style="font-weight:bold" />
                            <p:selectOneMenu
                                value="#{saisieDevisController.selectedDemande.lastDevis.fraDossiers}"
                                style="width: 175px;">
                                <f:selectItem itemLabel="Choisir..." itemValue=""
                                    noSelectionOption="true" />
                                <f:selectItem itemLabel="Aucun" itemValue="Aucun" />
                                <f:selectItem itemLabel="Déjà réglé" itemValue="Déjà réglé" />
                                <f:selectItem itemLabel="Charge Acquéreur"
                                    itemValue="Charge Acquéreur" />
                                <f:selectItem itemLabel="Charge SNC" itemValue="Charge SNC" />
                            </p:selectOneMenu>


                            <h:outputLabel value="Date de plan de référence"
                                style="font-weight:bold" />
                            <p:calendar
                                value="#{saisieDevisController.selectedDemande.lastDevis.datPlanReference}"
                                id="datePlanRef" showOn="button" required="true">
                                <f:convertDateTime pattern="dd/MM/yyyy" />
                            </p:calendar>

                            <h:outputText value="Frais de pilotage" style="font-weight:bold" />
                            <p:selectOneMenu
                                value="#{saisieDevisController.selectedDemande.lastDevis.fraPilotage}"
                                style="width: 175px;">
                                <f:selectItem itemLabel="Choisir..." itemValue=""
                                    noSelectionOption="true" />
                                <f:selectItem itemLabel="Oui" itemValue="Oui" />
                                <f:selectItem itemLabel="Non" itemValue="Non" />
                                <f:selectItem itemLabel="Pour mémoire" itemValue="Pour mémoire" />
                            </p:selectOneMenu>

                            <h:outputText value="Frais de plan" style="font-weight:bold" />
                            <p:selectOneMenu
                                value="#{saisieDevisController.selectedDemande.lastDevis.fraPlan}"
                                style="width: 175px;">
                                <f:selectItem itemLabel="Choisir..." itemValue=""
                                    noSelectionOption="true" />
                                <f:selectItem itemLabel="Aucun" itemValue="Aucun" />
                                <f:selectItem itemLabel="Charge Acquéreur"
                                    itemValue="Charge Acquéreur" />
                                <f:selectItem itemLabel="Charge SNC" itemValue="Charge SNC" />
                            </p:selectOneMenu>

                        </h:panelGrid>

                    </p:tab>

                    <p:tab id="devisTab" title="Devis">
                        <h:panelGrid columns="2" cellpadding="10">


                            <h:panelGrid columns="4" cellpadding="10">

                                <h:outputText id="numDevis" value="Numéro de devis"
                                    style="font-weight:bold" />
                                <h:inputText for="numDevis"
                                    value="#{saisieDevisController.selectedDemande.lastDevis.numDevis}" />

                                <h:outputText id="dateRecepDemande"
                                    value="Date de la réception de la demande"
                                    style="font-weight:bold" />
                                <h:outputText for="dateRecepDemande"
                                    value="#{saisieDevisController.selectedDemande.dateDemande}">
                                    <f:convertDateTime pattern="dd/MM/yyyy" />
                                </h:outputText>

                                <h:outputText id="dateSaisieDevis"
                                    value="Date de saisie de la demande" style="font-weight:bold" />
                                <h:outputText for="dateSaisieDevis"
                                    value="#{saisieDevisController.selectedDemande.dateSaisie}">
                                    <f:convertDateTime pattern="dd/MM/yyyy" />
                                </h:outputText>

                                <h:outputText id="ficheOptionDevis" value="Fiche d'oprion"
                                    style="font-weight:bold" />
                                <h:outputText for="ficheOptionDevis"
                                    value="#{saisieDevisController.selectedDemande.ficheOption}" />

                            </h:panelGrid>

                        </h:panelGrid>
                    </p:tab>

                    <p:tab id="previsualisationTab" title="Prévisualisation">
                        <h:panelGrid columns="2" cellpadding="10">

                        </h:panelGrid>
                    </p:tab>
                </p:tabView>

                <p:panel>
                    <ui:include src="ligneDataTable.xhtml" />
                </p:panel>

                <h:panelGrid columns="4" cellpadding="10"
                    style="text-align: center;margin-left: 25%;width: 50%; margin-right: 25%; margin-top: 30px; background-color:RGB(225,240,233)">

                    <h:outputText id="chargeSncHt" value="Charge SNC HT"
                        style="font-weight:bold" />
                    <h:outputText for="chargeSncHt"
                        value="#{saisieDevisController.selectedDemande.idDemande}" />

                    <h:outputText id="chargeAcqHt" value="Charge Acq HT"
                        style="font-weight:bold" />
                    <h:outputText for="chargeAcqHt" value="200" />

                    <h:outputText id="chargeSncTtc" value="Charge SNC TTC"
                        style="font-weight:bold" />
                    <h:outputText for="chargeSncTtc" value="0" />

                    <h:outputText id="chargeAcqTtc" value="Charge ACQ TTC"
                        style="font-weight:bold" />
                    <h:outputText for="chargeAcqTtc" value="0" />

                </h:panelGrid>

                <h:panelGrid columns="3" cellpadding="10" style="margin: 0 auto;">
                    <p:commandButton value="Valider" id="saveDemande"
                        styleClass="ui-priority-primary"
                        action="#{saisieDevisController.updateValidate}"
                        style="margin-left:10px;margin-top:10px;margin-bottom:10px;height:125%;width:90px">
                    </p:commandButton>

                    <p:commandButton value="Annuler" id="cancelDemande"
                        styleClass="ui-priority-primary"
                        action="#{saisieDevisController.updateCancel}"
                        style="margin-left:10px;margin-top:10px;margin-bottom:10px;height:125%;width:90px"
                        immediate="true" />

                    <p:commandButton value="Suspendre" id="suspendDemande"
                        styleClass="ui-priority-primary"
                        action="#{saisieDevisController.updateSuspend}"
                        style="margin-left:10px;margin-top:10px;margin-bottom:10px;height:125%;width:90px">
                    </p:commandButton>
                </h:panelGrid>

            </h:form>
        </p:fieldset>
    </ui:define>

</ui:composition>

#{message['app.page.main.title']}

控制器:

@Component
@Scope("view")
public class SaisieDevisController implements Serializable {
//...
@ManagedProperty("#{demandeController.selectedDemande}")
private DemandeDto selectedDemande;
private Long idDemande;

//...
    public String init(){
    if (!FacesContext.getCurrentInstance().isPostback()) {
        selectedDemande = new DemandeDto();
        selectedDemande.setIdBien(new BienDto());
        listDescriptifs = new ArrayList<DescriptifDto>();
        selectedDecriptif = new DescriptifDto();
        actualize();
    }
    return null;
}

public String initLigne(){
    ligneToSave = new LigneDto();
    listLots = new ArrayList<LotDto>();
    listLots = lotService.findAll();
    listSituations = new ArrayList<SituationDto>();
    listSituations = situationService.findAll();
    listUnites = new ArrayList<UniteDto>();
    listUnites = uniteService.findAll();
    return "/views/demande/saisieDevis/addLigne?faces-redirect=true";
}

public void actualize(){
    selectedDemande = saisieDevisService.findById(idDemande);
    selectedDemande.setLastDevis(selectedDemande.getLastDevis());
}
@组件
@范围(“视图”)
公共类控制器实现可序列化{
//...
@ManagedProperty(“#{DemandController.selectedDemande}”)
对所选需求的私人需求;
私人长途电话;
//...
公共字符串init(){
如果(!FacesContext.getCurrentInstance().isPostback()){
selectedDemande=新DemandeDto();
selectedDemande.setIdBien(new BienDto());
listDescriptifs=新的ArrayList();
selectedDecriptif=new DescriptifDto();
实现();
}
返回null;
}
公共字符串initLigne(){
ligneToSave=新的LigneDto();
listLots=newarraylist();
listLots=lotService.findAll();
ListSciences=新的ArrayList();
ListSciences=situationService.findAll();
listUnites=新的ArrayList();
listUnites=uniteService.findAll();
return“/views/demande/saisiedesign/addLigne?faces redirect=true”;
}
公共空间实现(){
selectedDemande=saisiedesignService.findById(idDemande);
selectedDemande.setLastDevision(selectedDemande.getLastDevision());
}
记住,在“调用应用程序”阶段结束之前,不可能触发preRenderView事件。请仔细检查以下内容:

  • 是否调用了操作?如果发生转换器/验证错误,则跳过“调用操作”阶段,并立即呈现响应
  • 您是从其他地方调用该方法吗?
    saisiedesigncontroller.init
    听起来非常通用。可能类似于
    @PostConstruct
    的触发器会更早调用它(嵌套)

希望对您有所帮助……

您能添加控制器源代码的一个(可能是简要介绍的)版本吗?谢谢,我编辑了我的帖子。但是,该操作已被调用,我不会从其他地方调用该方法