[JSF] h:datatable i a4j

0

Mam taki kod:

<h:dataTable id="tabela_obiektow" value="#{odpowiedz.macierze}" var="m">
                    <h:column>
                        <h:panelGrid columns="2" >
                            <!-- wybór ilości kolumn -->
                            <h:outputText value="Ilość kolumn:"/>
                            <h:selectOneListbox value="#{m.ilosc_kolumn}" size="1">
                                <f:selectItems value="#{m.lista_ilosci_kolumn}"/>
                                <a4j:support event="onchange" actionListener="#{m.tworzMacierz}" reRender="macierz_rys"/>
                            </h:selectOneListbox>

                            <!-- wybór ilości kolumn -->
                            <h:outputText value="Ilość wierszy:"/>
                            <h:selectOneListbox value="#{m.ilosc_wierszy}" size="1">
                                <f:selectItems value="#{m.lista_ilosci_wierszy}"/>
                                <a4j:support event="onchange" actionListener="#{m.tworzMacierz}" reRender="macierz_rys"/>
                            </h:selectOneListbox>

                        </h:panelGrid>
                        <!-- rysuje macierz -->
                    </h:column>
                </h:dataTable>

Po zmianie jakiejś listy nic się nie dzieje, znaczy nie jest wywoływana metoda "m.tworzMacierz", poza dataTable wszystko działa dobrze. Jakieś pomysły??

0

Pomysł jest taki, żeby napisać action="#{m.tworzMacierz}" albo ewentualnie:
action="#{m.tworzMacierz()}".

0

dodałem do kolumny h:datatable

<h:commandButton value="dzialaj" action="#{m.tworzMacierz}"/>

i niestety wyrzuca wyjątek:(

javax.servlet.ServletException: #{m.tworzMacierz}: javax.el.MethodNotFoundException: /dodaj_zadanie.xhtml @48,94 action="#{m.tworzMacierz}": Method not found: [email protected]()
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

Ogólnie mam 1 klasę Odpowiedz która zawiera kilka macierzy, noi chcę żeby użytkownik mógł najpierw podać liczbę macierzy o określonej wielkości a następnie je wypełnił. Macie jakiś pomysł, nie musi to być JSF...

0

Wydaje mi się, że nie można odnaleźć metody tworzMacierz. Być może nie jest publiczna, albo m nie jest rozpoznawane. Wracając do pierwszego przykładu, to zastanawiam się czemu metoda tworzMacierz miałaby się wywoływać za każdym wybraniem rozmiaru macierzy, a nie po wybraniu obu.

0

Sorry że nie odpisywałem, ale dopiero teraz znalazłem trochę czasu.
Okazało się że nie mogło odnaleźć metody przez ten parametr ActionEvent:

 public void tworzMacierz(ActionEvent e){
        .....
    }

po zmianie na:

 public void tworzMacierz(){
       ....
    }

już uruchamia metodę :D

Dzięki za pomoc !!!

Pytałeś czemu uruchamiam tę metodę po zmianie jednej wartości: osoba wprowadzająca dane być może zmieni ilość kolumn,ale nie zmieni ilości wierszy, albo jeśli dwa razy zmieni ilość wierszy, a raz ilość kolumn to trzeba będzie jakoś to obsłużyć. Być może lepszym rozwiązaniem będzie dodanie przycisku który po wybraniu ilości będzie tworzył macierz.

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