2014-09-22 8 views
7

Według biblioteki znaczników dla http://xmlns.jcp.org/jsf/html, A h:panelGroup jestpanelGroup bez stylu i styleClass nie jest renderowany chyba ID podano

Przeznaczony do stosowania w sytuacjach, kiedy tylko jeden UIComponent dziecko może być zagnieżdżone, tak jak w przypadek faset. Jeśli występują atrybuty "style" lub "styleClass", a atrybut "layout" jest obecny z wartością "block", wyrenderuj element "div" , wyświetlając wartość atrybutu "style". jako wartość atrybutu "style" i wartości atrybutu "styleClass" jako wartości atrybutu "class". W przeciwnym razie, jeśli nie ma atrybutu "layout" lub atrybut "layout" zawiera wartość "" niż "", wyrenderuj element "span", wyprowadzając wartość "style" atrybutu " " jako wartości atrybutu "styl" i wartość atrybutu "styleClass" jako wartości atrybutu "klasa" .

W przypadku

<h:panelGroup id="id" layout="block"> 
    <!-- ... ---> 
</h:panelGroup> 

lub

<h:panelGroup layout="block" style="margin-right: 10px;"> 
    <!-- ... ---> 
</h:panelGroup> 

w div jest renderowany:

<div id="id"> 
</div> 

odpowiednie

<div style="margin-right: 10px;"> 
</div> 

ale kiedy pomijając id (jeśli ktoś nie chce updatepanelGroup) lub style (jeśli ktoś nie chce projektować z panelGroup) nie div jest renderowany i powstały bałagan HTML mogą z nich układ. Ponadto badanie sferę JSF, A panelGroup mogą być również stosowane warunkowo czyni elementy podrzędne pomocą jego rendered flagi, ale, jak wspomniano wcześniej, gdy pominięcie dwóch wymienionych cech wynik staje się warunkowo, ale bez div, jak

<h:panelGroup layout="block" rendered="true"> 
<it>Without DIV.</it> 
</h:panelGroup> 

prowadzi do

<it>Without DIV.</it> 

Po tym dochodzenia Chcę sprawdzić ze społecznością Stackoverflow że zrozumiałem to prawo, że gdy nie jest używany panelGroup jako pojemnik nazewnictwa lub zwyczajowego stylu jej elementów jest lepsze od rozwiązania współpracy nditional renderowania części (jeśli to konieczne) przy użyciu ui:fragment i części układającej się z zakodowanym div. Czy tak jest?

Odpowiedz

0

Uwaga: mówimy o tym, czy h:panelgroup wyrenderuje dowolny komponent HTML, ale chyba, że ​​render="false" wewnętrzne komponenty nie zostaną w żaden sposób zablokowane.

Drzewo zachowanie h:panelgroup składa się z dwóch kontroli:

  1. jest co najmniej jeden z „id” lub „styl” lub „styleClass” atrybuty ustawić?
    Tak:
    a. Renderuje <div>, jeżeli layout = "block", inaczej b. Renderuje <span> (layout = "bełkot" lub nieistniejąca)

    nr:

  2. sprawia żadnego elementu HTML. Nadal przydatne, jeśli chcesz korzystać z „renderowane” lub kiedy można zagnieździć tylko jeden składnik (tj <f:facet>)

Test dla układu atrybutów przychodzi tylko po 1. powyżej. Ponieważ twój trzeci przykład trafia do gałęzi no, jest on ignorowany.

+0

Czy to jest zgodne ze specyfikacją, że "renderowane" jest ignorowane, jeśli atrybuty wymienione w 1 nie są obecne? Więc ' BLA' jest zawsze renderowany? (nie mogę sprawdzić źródła implementacji lub specyfikacji z mojego telefonu teraz ...) Zobacz https://stackoverflow.com/questions/43611107/hpanelgroup-body-start-executed-when-rendered-attribut-evaluate-to- false – Kukeltje

+0

@Kukeltje renderowany atrybut ustawiony na false zablokuje render zarówno div/span, jak i wewnętrznych komponentów do '' - to, co adresowane jest pytanie, nie jest kontrolą renderowania komponentu, jest jedno z zachowań. – Mindwin