Warunkowe wyświetlanie komponentów JSF

79

Po pierwsze, jestem nowy w Java EE, pochodzę z silnego doświadczenia w programowaniu ASP .NET. Przeszedłem przez sieć i może mi się to nie udać, ale wydaje się, że nie ma prostych i konkretnych samouczków, w jaki sposób mogę połączyć klasę fasoli zapasowej z komponentami JSF.

Dobry przykład jest taki, obecnie próbuję stworzyć stronę JSF, na której znajduje się zestaw linków, takich jak pasek menu i zestaw formularzy. Planuję to, że po kliknięciu linku zostanie wyrenderowany określony formularz.

W ASP.NET mogłem łatwo pobrać element, a następnie ustawić atrybut tak, aby był wyświetlany. Zastanawiam się, czy istnieje łatwy sposób (cholera, nawet jakikolwiek), aby to zrobić w JSF.

Formularze są już na stronie, wystarczy, że ustawię atrybut „render” na true, gdy kliknę dany link.

Haikal Nashuha
źródło

Odpowiedzi:

158

Tak, użyj renderedatrybutu.

<h:form rendered="#{some boolean condition}">

Zwykle przywiązujesz go do modelu, zamiast pozwolić modelowi chwycić komponent i manipulować nim.

Na przykład

<h:form rendered="#{bean.booleanValue}" />
<h:form rendered="#{bean.intValue gt 10}" />
<h:form rendered="#{bean.objectValue eq null}" />
<h:form rendered="#{bean.stringValue ne 'someValue'}" />
<h:form rendered="#{not empty bean.collectionValue}" />
<h:form rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:form rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />

Zwróć uwagę na znaczenie słów kluczowych operatorów EL opartych takich jak gt, ge, lei ltzamiast >, >=, <=i <jako nawiasach kątowych <i >są zastrzeżone znaki w XML. Zobacz również to powiązane pytanie i odpowiedzi: błąd podczas analizowania XHTML: zawartość elementów musi składać się z poprawnie sformułowanych danych znakowych lub znaczników .

Jeśli chodzi o Twój konkretny przypadek użycia, załóżmy, że link przekazuje parametr taki jak poniżej:

<a href="page.xhtml?form=1">link</a>

Następnie możesz wyświetlić formularz jak poniżej:

<h:form rendered="#{param.form eq '1'}">

( #{param}jest to niejawny obiekt EL odwołujący się do a Mapreprezentującego parametry żądania)

Zobacz też:

BalusC
źródło
13

Oprócz poprzedniego postu możesz mieć

<h:form rendered="#{!bean.boolvalue}" />
<h:form rendered="#{bean.textvalue == 'value'}" />

Jsf 2.0

tosha Shah
źródło
1
Tak mały dodatek nie jest wart oddzielnej odpowiedzi.
Karl Richter