JSF i przekaznie parametru do Backing bean

0

Mam problme z przekazaniem parametru, oto kod:

<p:commandButton id="reservationAddButton" value="Dodaj" oncomplete="PF('wdlgAddReservationn').hide();" ajax="false">
                    <f:param name="afected" value="#{userBean.user.login}" /> 
                    <f:actionListener binding="#{reservationBean.addReservation()}"/> 
                    <f:actionListener binding="#{linkedTimelinesController.createTimeline()}"/>  
</p:commandButton>
public void addReservation() throws IOException, Exception{               
    FacesContext fc = FacesContext.getCurrentInstance();
    Map<String,String> params = fc.getExternalContext().getRequestParameterMap();
    String afected =  params.get("afected"); 
    }

Po uruchomienu otwiera się dialog: wdlgAddReservationn w którym po wypełnieniu danych i przyciśnięciu przycisku Dodaj do Backing bean przekazywany jest parametr. Wszystko działało do chwili gdy przeniosłem cały dialog do osobnego pliku JSF, teraz przekazany parametr zwraca zawsze null. Nie wiem dlaczego.

1

Możesz uzyskać tą wartość przez IoC użyj @Inject w przypadku CDI, w legacy jsf bean skorzystaj z @ManagedProperty.

0

Ok dzieki. Mam jeszcze jedno pytanie, niestety moja wiedzia w jsf jest dość uboga. Przeniosłem dwa dialogi do oddzielnych plików, chce obu użyc w jednej stronie jsp. Tutaj sposób importu do głównej strony:

<ui:include id="dialog1" src="dialogs/reservationAddDialog.xhtml" />
<ui:include id="dialog2" src="dialogs/reservationModifyDialog.xhtml"/>

Wywołanie dialogów:

<p:ajax event="add"  listener="#{linkedTimelinesController.onAdd}" update="reservationAddDialogForm:reservationAddDialogg" oncomplete="PF('wreservationAddDialogg').show()" />
<p:ajax event="edit" listener="#{linkedTimelinesController.onEdit}" update="reservationModifyDialogForm:dlgReservationn" oncomplete="PF('wdlgReservationn').show()"/>

I teraz co ciekawe gdy zadeklaruje użycie "dialog1" w pierwszej kolejnoście nie diałaja mi akcje przycisków w 2gim dialogu. No i odwrotnie. O czym powiniemen doczytać?

0

Możesz też spróbować zrobić open popup z Managed Beana:

    public void showDialog(){
        RequestContext.getCurrentInstance().execute("testDialog2.show()");
    }
0

Niestety kropki nie pomogły:

Timeline w pliku głównym:

<poue:timeline id="timeline" value="#{linkedTimelinesController.model}" var="event" varGroup="group" animate="true" 
                                           editable="true" eventMargin="10" eventMarginAxis="0"  showNavigation="true" groupsChangeable="true"
                                           showMajorLabels="false" axisOnTop="true" widgetVar="=timelineWdgt" showButtonNew="true"
                                           min="#{linkedTimelinesController.min}" max="#{linkedTimelinesController.max}">
                            
           <p:ajax event="add"  listener="#{linkedTimelinesController.onAdd}" update="reservationAddDialogForm:reservationAddDialogg"     
                                        oncomplete="PF('wreservationAddDialogg').show()" />                                                                                  
                            
          <p:ajax event="edit" listener="#{linkedTimelinesController.onEdit}" update="reservationModifyDialogForm:dlgReservationn"       
                                        oncomplete="PF('wdlgReservationn').show()"/>                                                            
                     
                                <f:facet name="group">  
                                    <h:outputText value="#{group.name}" style="font-weight:bold;"/>  
                                </f:facet>                            
                                <h:panelGrid columns="1">
                                    <h:outputText value="#{event.afected} #{event.topic}"/>
                                </h:panelGrid>  
 </poue:timeline>  

Do timeline mam przypisane akcje add i edit. Wywołuja one dialogi które umieściełem w oddzielnych plikach (gdy wcześnie były w tym samym co timeline było ok). Oto same dialog:

<ui:composition id="dialog">
     <h:form id="reservationAddDialogForm"> 
         <p:dialog id="reservationAddDialogg" header="Dodaj rezerwacje (dialog): " widgetVar="wreservationAddDialogg" showEffect="clip">
         <p:outputLabel value="#{userBean.user.login}"/>
         <h:panelGrid columns="2" cellpadding="10">              
          <h:outputLabel for="combiResources" value="Resources: " rendered="true"/>
         <p:selectOneMenu id="combiResources" value="#{reservationBean.reservation.resource}" converter="omnifaces.SelectItemsConverter">
         <f:selectItems value="#{resourceBean.resourceList}"  var="resourceVar" itemLabel="#{resourceVar.description}" itemValue="#{resourceVar}" />
             </p:selectOneMenu>
             </h:panelGrid>                               
            <h:panelGrid columns="3" cellpadding="10"> 
            <h:outputLabel for="afected" value="Dla użytkownika: "/>
            <p:selectOneMenu id="afected" value="#{reservationBean.reservation.afected}" converter="omnifaces.SelectItemsConverter">
            <f:selectItems value="#{userBean.ldapUserList}"  var="ldapList" itemLabel="#{ldapList.surname} #{ldapList.name}" itemValue="{ldapList.login}" />
                        </p:selectOneMenu>                                                      
                    </h:panelGrid>             
                    <h:panelGrid columns="3" cellpadding="10">
                        <h:outputLabel for="inputDscriptioneModify" value="Description: "/>                               
                        <p:inputTextarea value="#{reservationBean.reservation.topic}" rows="1" cols="50" counter="displayEvent" maxlength="50">
                        <h:outputText id="displayEvent" />
                    </h:panelGrid> 
                    <h:panelGrid columns="2" cellpadding="10">
                        <p:outputLabel for="startTime" value="Początek rezerwacji:" />
                        <p:calendar id="startTime" value="#{reservationBean.reservation.startDate}" pattern="dd-MM-yy HH:mm" required="true"/>                
                        <p:outputLabel for="stopTime" value="Zakończenie rezerwacji:" />
                        <p:calendar id="stopTime" value="#{reservationBean.reservation.stopDate}" pattern="dd-MM-yy HH:mm" stepMinute="15" />
                    </h:panelGrid>                
                    <p:commandButton id="reservationAddButton" value="Dodaj" oncomplete="PF('wdlgAddReservationn').hide();" ajax="false">
                        <f:actionListener binding="#{reservationBean.addReservation(userBean.user.login)}"/> 
                        <f:actionListener binding="#{linkedTimelinesController.createTimeline()}"/>  
                    </p:commandButton>                
                    <p:commandButton id="reservationCansel" value="Anuluj" update=":frm" action="#{linkedTimelinesController.createTimeline()}"
                                                  onsuccess="PF  ('wdlgAddReservationn').hide();"> </p:commandButton>                
                </p:dialog> 
            </h:form>   
        </ui:composition>

Jest tak ja wcześniej pisałem strasznie mnie to dziwi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1