java faces + jak odswiezyc tabelke

0

hej,
pisze maly formularz przy uzyciu icefaces. mam dwa beany: UsersBean - ktory odwzorowuje tabele users w bazie (id, imie, nazwisko) oraz ActionsBean:

public class ActionsBean{

 private ArrayList users;
 private int usersSize;

  public ActionsBean(){
   getUsers();
}

 public void getUsers(){

    //pobiera uzytkownikow z bazy i przypisuje ich do listy users
}

//gettery i settery dla users i usersSize
}

public class UsersBean{
  private int id;
 private String name;
  private String surname;

  public UsersBean(){}

public String deleteUser(){
  //usuwa uzytkownia o zadanym id. na razie na sztywno usuwam zawsze uzytkownika o id =3
return "ok"; 
}

//gettery i settery
}

moj kod w index.jspx ktory wyswietla tabelke:

<ice:dataTable
                            value="#{actionsBean.users}"
                            rows="#{actionsBean.usersSize}"
                            var="item">
                            <ice:column>
                                <f:facet name="header">
                                    <ice:outputText value="Id"/>
                                </f:facet>
                                <ice:outputText value="#{item.id}"/>
                            </ice:column>

                            <ice:column>
                                <f:facet name="header">
                                    <ice:outputText value="Imie"/>
                                </f:facet>
                                <ice:outputText value="#{item.name}"/>
                            </ice:column>

                            <ice:column>
                                <f:facet name="header">
                                    <ice:outputText value="Nazwisko"/>
                                </f:facet>
                                <ice:outputText value="#{item.surname}"/>
                            </ice:column>
                                <ice:commandButton value="Usun" action="#{usersBean.deleteUser}">
                                </ice:commandButton>
                                <ice:commandButton value="Edytuj">

                                </ice:commandButton>
                            </ice:column>
                        </ice:dataTable>

Problem mam taki-jak klikne na przycisk 'usun' to faktycznie uzytkownik zostaje usuniety z bazy. ale moja tabelka na stronie sie nie zmienia :/ a powinna sie zminiejszyc o jednego uzytkownika. moj faces-config.xml wyglada tak:

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2"  xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
    <managed-bean>
        <description>
            Actions bean
        </description>
        <managed-bean-name>actionsBean</managed-bean-name>
        <managed-bean-class>
            test.beans.ActionsBean
        </managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

    <managed-bean>
        <description>
            User bean
        </description>
        <managed-bean-name>usersBean</managed-bean-name>
        <managed-bean-class>
            test.beans.UsersBean
        </managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

    <navigation-rule>
    <from-view-id>index.jspx</from-view-id>
    <navigation-case>
        <from-action>index.jspx</from-action>
      <from-outcome>ok</from-outcome>
      <to-view-id>index.jspx</to-view-id>
    </navigation-case>
  </navigation-rule>
</faces-config>

wydaje mi sie ze cos nie tak mam w tym xmlu. dumam juz dosc dlugi czas nad tym i po prostu nie mam pomyslu. Czy ktos z Was moglby mi pomoc?

         pzdr,
              misty
0

W metodzie deleteUser() (po usunięciu) wywołaj jeszcze raz getUsers() lub znajdź usuniętego użytkownika na liście i go z niej usuń.

0
  • jak sie nazywa twoj getter do pobierania listy uzytkownikow????
  • actionBean i userBean musza byc zapisane w sesji? przez getUsers() (piszesz ze masz jeszcze getter do pobierania uzytwkonikow, powinienes blad dostac bo sie tak samo nazywa jak ta funkcja) pobierasz uzytkownikow tylko przy tworzeniu objeku, bo to jest bean sesyjny Potem odwolujesz sie to tej listy. Jak usuniesz nawet wszystkich uzytkownikow to twoj bean sesyjny sie o tym nigdy nie dowie.
0

hej, poradzilam sobie juz z tym problemem zanim jeszcze ktos mi odpisal tu. wybaczcie-powinnam byla od razu dac znac. rozwiazanie bylo takie by wywolac te metode jeszcze raz w deleteUsers(tak jak napisal Krzysiek).

mam jednak inne (chyba podobne) pytanie. Jesli mam 2 zakladki - w jednej mam tabelke i w drugiej. W tej 1szej zakladce, oprocz tabelki mam jeszcze mozliwosc dodawania uzytkownikow. Zakladka druga-wyswietla wlasnie tabele z uzytkownikami.

i teraz tak: jestem w zakladce nr1-dodaje uzytkownika-to czy moge zrobic tak, ze jak wejde w zakladke druga to mi sie odswiezy i zobacze tam tego nowego dodanego uzytkownika? moge tak sobie dzialac miedzy zakladkami?
moj kod wyglada mniej wiecej tak:

       <ice:panelTab label="Zakladka nr 1">
         <div align="left">
        <ice:dataTable  columnClasses="columnsColumn"
                                        columns="1" style="border:1px solid silver;"
                                        value="#{myBean.users}"
                                        rows="2"
                                        var="item">
//tu wyswietlam jakies dane w tabelce, a nizej mam przycisk ktory pokaze mi formularz do dodawania nowych uzytkownikow
         </ice:dataTable>
                     </div>
      </ice:panelTab>
      <ice:panelTab label="Zakladka nr 2">
         <div align="left">
         <ice:dataTable  columnClasses="columnsColumn"
                                        columns="1" style="border:1px solid silver;"
                                        value="#{accountsBean.list}"
                                        rows="2"
                                        var="item2">
//tutaj dalej ich wyswietalm
         </ice:dataTable>
                     </div>
    </ice:panelTab>

czyli-jak jestem w zakladce 1szej, dodam nowego uzytkownika to czy moge jakos podzialac na zakladke druga by tam sie odswiezylo?

           pzdr,
        misty

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