Czy istnieje sposób renderowania komponentu na podstawiebieżąca wartość, którą użytkownik wybrał ze składnika selectOneMenu? Mój składnik selectOneMenu jest wypełniony wyliczeniem składającym się z dwóch wartości: palacza i osoby niepalącej. Jeśli użytkownik wybrał palacza, chcę wyświetlić pole wyboru poniżej niego, które pozwala użytkownikowi sprawdzić, ile pali dziennie 10, 20, 30+ itd. Chcę również, aby działało odwrotnie, jeśli użytkownik wybrał osobę niepalącą, tj. pola wyboru nie renderują / znikają.
Odpowiedzi:
6 dla odpowiedzi № 1Wystarczy sprawdzić wartość menu rozwijanego w rendered
atrybut docelowych komponentów i zaktualizuj ich wspólnego rodzica za pomocą <f:ajax>
. Oto przykład:
<h:selectOneMenu value="#{bean.item}">
<f:selectItem itemValue="one" />
<f:selectItem itemValue="two" />
<f:selectItem itemValue="three" />
<f:ajax render="results" />
</h:selectOneMenu>
<h:panelGroup id="results">
<h:panelGroup rendered="#{bean.item eq "one"}">
You have selected "one".
</h:panelGroup>
<h:panelGroup rendered="#{bean.item eq "two"}">
You have selected "two".
</h:panelGroup>
<h:panelGroup rendered="#{bean.item eq "three"}">
You have selected "three".
</h:panelGroup>
</h:panelGroup>
Jeśli chcesz wykonać logikę biznesową na podstawie wybranej wartości, użyj <f:ajax listener>
.
<f:ajax listener="#{bean.changeItem}" render="results" />
public void changeItem() {
someResult = someService.getByItem(item);
}
Zobacz też:
- Dlaczego muszę zagnieździć komponent z renderowanym = "# {some}" w innym komponencie, gdy chcę go zaktualizować?
- Jak ładować i wyświetlać zależne h: selectOneMenu przy zmianie h: selectOneMenu
- Warunkowe wyświetlanie komponentów JSF