ďťż
 
<f:subview vs. <c:if - pytanie ďťż
 
<f:subview vs. <c:if - pytanie
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

<f:subview vs. <c:if - pytanie



Gabcia85 - 29-03-2007 00:04
<f:subview vs. <c:if - pytanie
  Witam,

Zrobilam sobie maly test z warunkiem wyswietlania w JSF,
i majac kombinacje
<c:if test="${xxx.yyy > 0}">
jakies kolejne warunki
</c:if>

<f:subview rendered="#{xxx.zzz == 0}">
jakies kolejne warunki
</f:subview>

Czy ktos moze mi wytlumaczyc dlaczego w subview jesli mam warunek
rendered to sprawdza mi wewnatrz kolejne podwarunki, a z
wykorzystaniem <c:if nie?
W aplikacji korzystalamm z myfaces i facelets.





Gabcia85 - 30-03-2007 00:08

  Dokładniej chdozi o to ze w c:if jesli warunem pierwszy nie jest
spelniony to nie interesuje go to co jest w srodku tylko od razu
blokuje wyswietlanie, natomiast <f:subview sprawdza dalej wszystkie
warunki...
Ano dzieje sie tak bo wywalilo mi blad na stronce z jednym warunkiem w
srodku, gdy mialam <f:subview i jakos zaciekawilo mnei to i
postanowilam sprawdzic to samo z c:if, ktory nic nie wywalil i
skompilowal poprawnie stronke




Jacek Laskowski - 30-03-2007 00:08

  Gabcia85 wrote:

> Zrobilam sobie maly test z warunkiem wyswietlania w JSF,
> i majac kombinacje
> <c:if test="${xxx.yyy > 0}">
> jakies kolejne warunki
> </c:if>
>
> <f:subview rendered="#{xxx.zzz == 0}">
> jakies kolejne warunki
> </f:subview>
>
> Czy ktos moze mi wytlumaczyc dlaczego w subview jesli mam warunek
> rendered to sprawdza mi wewnatrz kolejne podwarunki, a z
> wykorzystaniem <c:if nie?
> W aplikacji korzystalamm z myfaces i facelets.

Za mało danych! Zgaduję, że pracujesz z JSF 1.1 i pewnie mieszasz JSTL z
JSF (chociaż z facelets powinno to działać poprawnie?!). Tak, czy owak,
zanim padną strzały (prawdopodobnie dużo niecelnych), opisz środowisko -
serwer aplikacyjny, biblioteki i wersje, wersje, duuużo wersji ;-)

Jacek

--
Jacek Laskowski
http://www.JacekLaskowski.pl




Gabcia85 - 30-03-2007 00:08

  JBoss AS 4.0.4,
Seam + JSF 1.2 + Facelets

no tak z przyzwyczajenia wstawiłam <c:if'a z JSTL'a, jednak w dalszym
ciagu dziwi mnie to ze w <f:subview mimo ze warunek renderowania nie
jest spelniony to sprawdza "głębsze" warunki, a c:if nie...moglbys
sprobowac u siebie?





=?ISO-8859-2?Q?Marcin_Krzysztof_D=B1browski?= - 05-04-2007 00:05

  Mam podobny problem co kolega.
A jest on następujący - mam tabelę która może zawierać obiekty kilku
różnych typów, raz jest to java bean, a raz jest to tablica. Żeby
uniknąć błędów chciałem użyć właściwości rendered komponentów JSF, ale
okazuje się, że nie spełnienie tego warunku nie powoduje dalszego
wykonywania kodu zawartego w tagu, tylko go próbuje wykonać.
Na stronie jsp wygląda to tak:

<h:dataTable value="#{myBean.list}" var="record">
<h:column>
<h:panelGroup>
<h:outputText value="#{record.rowObject[0]}" rendered="#{not
empty record.params['tableRow']}"/>
<h:outputText value="#{record.rowObject.name}" rendered="#{empty
record.params['tableRow']}"/>
<h:panelGroup>
</h:column>
</h:dataTable>

gdzie *record* jest obiektem mojej klasy, posiadającym dwie właściwości:
rowObject (do przechowywania obiekt z wartościami komórek) i mapę
params. W mapie params obiektu recordu jest obecny klucz tableRow tylko
gdy właściwość rowObject jest tablicą.

No i problem pojawia się podczas przetwarzania elementów listy będących
tablicami. Linia <h:outputText value="#{record.rowObject.name}"
rendered="#{empty record.params['tableRow']}"/> generuje wyjątek
"ReferenceSyntaxException: The "." operator was supplied with an index
value of type "java.lang.String" to be applied to a List or array, but
that value cannot be converted to an integer.".

No i chyba to dowodzi, że używanie rendered nie zapobiega wykonywaniu
tego co jest przypisane do value, a chyba powinno?

Tak mniej więcej wygląda mój problem - a zasadnicze pytanie brzmi jak to
obejść?
Używam JSF 1.1 implementacja IceFaces, oparta na core od sun.
Od razu dodam że muszę używać IceFaces co najwyżej mogę zmienić core na
np z MyFaces (ale nie wiem czy to się łatwo robi i czy by to pomogło).

Jakieś propozycje obejścia?

Dąbek




ryszard - 05-04-2007 00:05

  > Mam podobny problem co kolega.
> A jest on następujący - mam tabelę która może zawierać obiekty kilku
> różnych typów, raz jest to java bean, a raz jest to tablica. Żeby
> uniknąć błędów chciałem użyć właściwości rendered komponentów JSF, ale
> okazuje się, że nie spełnienie tego warunku nie powoduje dalszego
> wykonywania kodu zawartego w tagu, tylko go próbuje wykonać.
> Na stronie jsp wygląda to tak:
>
> <h:dataTable value="#{myBean.list}" var="record">
> <h:column>
> <h:panelGroup>
> <h:outputText value="#{record.rowObject[0]}" rendered="#{not
> empty record.params['tableRow']}"/>
> <h:outputText value="#{record.rowObject.name}" rendered="#{empty
> record.params['tableRow']}"/>
> <h:panelGroup>
> </h:column>
> </h:dataTable>
>
> gdzie *record* jest obiektem mojej klasy, posiadającym dwie właściwości:
> rowObject (do przechowywania obiekt z wartościami komórek) i mapę
> params. W mapie params obiektu recordu jest obecny klucz tableRow tylko
> gdy właściwość rowObject jest tablicą.
>
> No i problem pojawia się podczas przetwarzania elementów listy będących
> tablicami. Linia <h:outputText value="#{record.rowObject.name}"
> rendered="#{empty record.params['tableRow']}"/> generuje wyjątek
> "ReferenceSyntaxException: The "." operator was supplied with an index
> value of type "java.lang.String" to be applied to a List or array, but
> that value cannot be converted to an integer.".
>
> No i chyba to dowodzi, że używanie rendered nie zapobiega wykonywaniu
> tego co jest przypisane do value, a chyba powinno?
>
> Tak mniej więcej wygląda mój problem - a zasadnicze pytanie brzmi jak to
> obejść?
> Używam JSF 1.1 implementacja IceFaces, oparta na core od sun.
> Od razu dodam że muszę używać IceFaces co najwyżej mogę zmienić core na
> np z MyFaces (ale nie wiem czy to się łatwo robi i czy by to pomogło).
>
> Jakieś propozycje obejścia?
>
> Dąbek
>
>
chyba troche pokomplikowales, linja
#{myBean.list}" var="record" sugeruje ze myBean.getList zwraca liste record-ow
z kolej:
record.rowObject[0] - mowi ze kazdy rekord ma tablice rowObject-ow (swoja droga
nie wiedzialem ze mozna tak wolac tablice)
i dalej:
record.rowObject.name - znaczy mniej wiecej tyle ze twoj rekord ma (aggregation)
rowObject ktory ma name.

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl




Jacek Laskowski - 06-04-2007 00:03

  Marcin Krzysztof Dąbrowski wrote:
> Mam podobny problem co kolega.

Tym samym weszliśmy w sezon na problemy ;-)

> A jest on następujący - mam tabelę która może zawierać obiekty kilku
> różnych typów, raz jest to java bean, a raz jest to tablica. Żeby
> uniknąć błędów chciałem użyć właściwości rendered komponentów JSF, ale
> okazuje się, że nie spełnienie tego warunku nie powoduje dalszego
> wykonywania kodu zawartego w tagu, tylko go próbuje wykonać.

I dobrze, bo tak powinno być, ponieważ wynika to właściwie z działania
samego JSP, na którym oparty jest JSF (to właśnie było siłą JSF, że
wykorzystało prostotę i powszechność JSP). Oczywiście poznanie etapów
JSF też jest istotne. Sądzę, że temat mógłby być dobrym tematem na
1-godziną prezentację postaram przedstawić go krócej ;-)

Mamy 6 etapów w życiu zlecenia JSF (@see
http://java.sun.com/javaee/5/docs/tu...SFIntro8.html). Najpierw
odtwarzany jest widok, który był poprzednio (przyjmijmy, że nie
istniał, bo jest to pierwsze wejście do aplikacji, chociaż tak na prawdę
nie ma to znaczenia). Drugi etap to "Apply Request", czyli przypisywanie
parametrów do kontrolek. W naszym przypadku jest to h:outputText.
Kontrolka JSF to nic innego jak własny znacznik JSP, który korzysta z
infrastuktury JSF. Stąd, więc najpierw tworzony jest egzemplarz
kontrolki...znaczy się...znacznika JSP o nazwie outputText z przestrzeni
h. Pamiętaj, że to nadal jest JSP - nic z JSF. Teraz przekazywane są
parametry do egzemplarza za pomocą metod modyfikujących (ang. setter),
tj. wywoływana jest metoda processDecodes(FacesContext context), w
której klasa komponentu ustawia odpowiednie właściwości. Zaczynamy
schodzić za nisko, aby zmieścić się w wyznaczonym czasie, więc wystarczy
pamiętać, że wartości muszą zostać "rozwiązane" (przy pomocy
odpowiednich metod UIComponent i podobnych) i są rozwiązywane w tym
etapie - etapie 2 o nazwie "Apply Request". Wywoływane są kolejne etapy,
aż do upragnionego "Render Response". W nim tworzone jest drzewo JSF i
wtedy dopiero kontrolka odpytywana jest, czy się wyświetli czy nie.
Należy pamiętać, że to w gestii kontrolki jest decyzja, czy się
wyświetli, czy nie - cudów nie ma. Oczywiście "standardem" jest
zakładać, że rendered jest zarezerwowane dla umożliwienia
włączania/wyłączania kontrolki, ale tak nie musi być. Możesz stworzyć
własną kontrolkę, która atrybut rendered wykorzysta do czego innego.
Twój wybór jako autora kontrolki (najwyżej mniej osób z niego skorzysta
przyzwyczajonych do konwencji).

Podsumowując wartość są rozwiązywane zanim rendered dojdzie do głosu.

> No i chyba to dowodzi, że używanie rendered nie zapobiega wykonywaniu
> tego co jest przypisane do value, a chyba powinno?

Tak. Patrz (przydługi) opis wyżej.

> Tak mniej więcej wygląda mój problem - a zasadnicze pytanie brzmi jak to
> obejść?

Prosto! ;-) Korzystasz z własnego DataModel. I tu mógłbym się rozpisać,
ale proponuję zajrzeć do mojego artykułu Tabele w JavaServer Faces -
znacznik <h:dataTable> -
http://www.jaceklaskowski.pl/wiki/Ta...h:dataTable%3E

Witaj w świecie JSF! (pamiętaj, że JSF ułatwi Ci pracę, jeśli zrozumiesz
jego działanie. Ot taki paradoks).

Jacek

--
Jacek Laskowski
http://www.JacekLaskowski.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [OT?] Monitory dla =?ISO-8859-2?Q?grafik=F3w_-_pytanie_o_?==?ISO-8859-2?Q?przej=B6ci=F3wki?= =?ISO-8859-2?Q?kr=F3tkie_pytanie_-_gdzie_forum_grafik=F3?==?ISO-8859-2?Q?w_=28Corel_Painter=29_=3F?= Pytanie -Papier Nalepka - =?ISO-8859-2?Q?p=B3ytka_w_kszta=B3?==?ISO-8859-2?Q?cie_wizyt=F3wki?= [oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?= Pytanie o =?ISO-8859-2?Q?kas=EA=2E=2E=2E?= pytanie o zapytanie z having count = count z innej kolumny =?iso-8859-2?q?Kr=F3tkie_pytanie_-_PostgreSQL_8=2E2=2E2_i_CREATE_ASSERTION?= =?iso-8859-2?q?Pytanie_SQL__spe=B3niaj=B1ce_wiecej_jak_jeden_ warunek_na_jednej_kolumnie=2E?= CA nr 1/2007 - pytanie do tych co =?ISO-8859-2?Q?maj=B1?= ten numer Re: MS SQL 2000 - Wadliwy optymalizator? (dlugie pytanie...)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • absolwenci.keep.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com