JSF i przekaznie parametru do Backing bean

JSF i przekaznie parametru do Backing bean
EI
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam problme z przekazaniem parametru, oto kod:

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

M9
  • Rejestracja: dni
  • Ostatnio: dni
1

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

EI
  • Rejestracja: dni
  • Ostatnio: dni
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:

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

Wywołanie dialogów:

Kopiuj
<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ć?

M9
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
    public void showDialog(){
        RequestContext.getCurrentInstance().execute("testDialog2.show()");
    }
EI
  • Rejestracja: dni
  • Ostatnio: dni
0

Niestety kropki nie pomogły:

Timeline w pliku głównym:

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

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.