preRenderView-Event在动作之前触发

时间:2014-01-13 10:11:53

标签: jsf-2 primefaces

我的preRenderView-Event有点麻烦。我的页面也使用命令按钮来提交数据,但不幸的是,在调用按钮操作之前总是调用preRenderView-Event。

<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>

控制器:

@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());
}

1 个答案:

答案 0 :(得分:0)

考虑到JSF Lifecycle,在“调用应用程序”阶段完成之前,实际上不可能触发preRenderView-Event。请仔细检查以下内容:

  • 是否完全调用了操作?如果发生转换器/验证错误,则会跳过“调用操作”阶段并立即呈现响应。
  • 您是否从其他地方调用该方法? saisieDevisController.init听起来非常通用。也许像@PostConstruct这样的触发器会先调用它(嵌套)。

希望它有所帮助...