tworzenie obiektow z argumentem + jsf

0

hej, mam takie pytanie-przykladowo tworze tabelke. aby naladowac ja wynikami (ktore sa pobierane z beana) napisze:

  <ice:dataTable
                            columnClasses="columnsColumn"
                            value="#{mojBean.accounts}"
                            rows="#{mojBean.accountsSize}"
                            var="item">
<ice:column>...//itd
</ice:dataTable>

bean:

public class MojBean(){
  private ArrayList accounts;
private int accountsSize;

 public MojBean(){
  loadAccounts();//ta metoda wyciaga z bazy uzytkownikow i przypisuje ich do listy accounts
}

//gettery i settery
}

miejsce : value="#{mojBean.accounts}" jest rownowazne utworzeniu obiektu mojBean
fatalnym jest to, ze kazde takie odwolanie, tworzy mi obiekt na nowo, a co za tym idzie wywolywana jest metoda loadAccounts. mam pozniej takie miejsca w kodzie gdzie musze wykorzystac 'mojBean' ale nie moge sobie pozwolic na kolejnego selecta z bazy bo akurat w tamtych miejscach to bez sensu. metode te jednak musze wywolac w konstruktorze aby zapelnic dataTable wartosciami. najlepszym rozwiazaniem dla mnie byloby aby moc skorzystac z konstruktora z argumentem. przykladowo moglaby miec:

 public MojBean(int i){
if(i == 1){
  loadAccounts();//ta metoda wyciaga z bazy uzytkownikow i przypisuje ich do listy accounts
} else{
  //cos tam
}
}

ale jak ja moge w jsf utworzyc obiekt z argumentem??? czy da sie zrobic cos takiego: value="#{mojBean(2).accounts}"

jesli tak-to jak?
pzdr,
misty

0

Zamiast kombinowac z tworzeniem beanow z parametrami (nie da sie, a i tak sposob to hack na maks i ochydny) lepiej po prostu poczytaj o scopes. Np, beana tworzysz za poerwszym razem a za drugim jak sie odwolujesz to jest najpierw sprawdzane czy istnieje cyz jeszcze nie.

0

hej,
dzieki za odpowiedz. tak czulam ze musi byc lepszy sposob. ale nie za bardzo moge znalezc cos o tych scopach (to chodzi o to ze w tym faces.xml trzeba tego beana zdefiniowac jako scope, tak? czy cos jeszcze? czy to w ogole nie to?). czy moglbys opisac mi w 2-3ch zdaniach, ewentualnie podac przyklad-lub moze znasz jakis link? tylko prosze nie odsylaj mnie na strone icefaces.

jeszcze raz dzieki za odpowiedz!

0

Jak definiujesz tego beana w faces-config.xml?

0

o tak: (w sumie jest tu scope.. ale przyznam szczerze ze wzielam te definicje z jakiegos przykladu i nie wiem czy tak powinno byc..)

    <managed-bean>
        <description>
            Accounts bean
        </description>
        <managed-bean-name>accountsBean</managed-bean-name>
        <managed-bean-class>
            test.beans.AccountsBean
        </managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
0
misty napisał(a)

miejsce : value="#{mojBean.accounts}" jest rownowazne utworzeniu obiektu mojBean
fatalnym jest to, ze kazde takie odwolanie, tworzy mi obiekt na nowo, a co za tym idzie wywolywana jest metoda loadAccounts.

Zakladam tutaj, ze kazdego odwolanie do #{mojBean} na 1 stronce nie powoduje utworzenia nowego beana, nowe instancje sa tworzone za kazdym razem jak wyslesz rzadanie do stronki?

Twoj bean ma przeciez jawnie ustawiony request scope w faces-config.xml. Zmien na session np, to bedzie oznaczalo, ze jesli beana nie bedzie to zostanie utworzony i wstawiony do sesji, a gdy nastepne rzadanie bedzie pytac o tego beana do zostanie sprawdzona sesja, tam zostanie znaleziony i zostanie uzyty.

Sprobuj czy tak to zadziala.

0

dziala juz. tzn ogolnie bylo tak ze robilam tabelke 1, a pod nia druga. ta druga miala miec tylko pola beana (a nie cala liste beanow), a nie chcialam na niej wywolywac 'accounts', wiec nie chcialam drugi raz pisac
value="#{mojBean.accounts}" (to accounts to mi zwraca ArrayList z obiektami typu MojBean
Dlatego zaczelam kombinowac z tymi konstruktorami (nie znam w sumie JSF stad to moje bladzenie). a wlasnie odkrylam ze rownie dobrze moge w 2giej tabelce napisac:

value="#{mojBean}" i wtedy bede miala normalnie dostep do pol (czyli do metod get-set pojedynczego obiektu typu MojBean, o co mi chodzilo).

chyba troche zamotalam opis :)

bardzo dziekuje za sugestie! bo jak napisales o tym scopie to juz wiedzialam ze powinno dzialac :)

       pzdr,
          misty
0

No to jest troche problem ludzi ktorzy sie zabieraja za pisanie w technologii ktorej kompletnie nie znaja. Warto poswiecic troche czasu, przeczytac chociaz podstawy, zeby pozniej nie bladzic z banalami. Nie mam nic do Ciebie osobiscie.

0

wiesz co, ale ja wlasnie wpierw od tego zaczelam. weszlam na str ice-faces. tam niby jest pdf dla developerow-ale jest straaasznie dlugi, duzo jest opisow przez ktore nie mialam czasu przebrnac-i wiesz, w tym wszystkim ciezko bylo odnalezc to, co tak na prawde powinnam przeczytac by zrozumiec podstawy.
dalej na ich stronie-tutoriale-tez na ich przykladach staralam sie zrozumiec jak sie tam robi jakies formularze etc. ale ogolnie moim zdaniem brak tam jest szybkiego how-to-start. same google nie dostarczaja poza tym zbyt wiele info. szukalam przykladow na jakis zagranicznych forach ale albo nie bylo to do konca to czego szukam albo nie dzialalo albo nie rozumialam. i sie kolo zamknelo wiec napisalam tu. wierz mi ze juz wyroslam z zabierania sie do czegos bez wczesniejszego przyblizenia sobie podstaw. ale tutaj zwyczajnie zabraklo mi tutoriala, moze zle szukalam-nie wiem. tak czy siak - jesli mozesz jakiegos linka polecic-bardzo chetnie tam zajrze.

              pzdr, 
                  misty
0

Powinnas pewnie zaczac od tego ze Ice to jest implementacja JSF. Nie wiem, nigdy nie korzystalem z Ice'ow, ale korzystalem w JSF, dlatego znalem odpowiedz. W tutku do JSF jest na pewno o scopes.

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