Ustawia wartość tylko podczas fazy aktualizacji wartości modelu (ponieważ jest rozszerzana UIInput
).
Ustawiona wartość nie jest dostępna w trakcie @PostConstruct
, więc potrzebujesz dodatkowego <f:event type="preRenderView" listener="#{bean.init}" />
wewnątrz, <f:metadata>
aby wykonać inicjalizację / wstępne ładowanie w oparciu o ustawione wartości. Od JSF 2.2 możesz <f:viewAction>
zamiast tego użyć .
Pozwala na zagnieżdżoną <f:converter>
i <f:validator>
bardziej szczegółową konwersję / walidację. Nawet <h:message>
można dołączyć.
Może być uwzględniony jako ciąg zapytania GET przy użyciu includeViewParams
atrybutu <h:link>
lub includeViewParams=true
parametru żądania w dowolnym adresie URL.
Może być używany na @RequestScoped
fasoli, ale wymaga, aby komponent bean był, @ViewScoped
jeśli chcesz, aby parametry widoku przetrwały wszelkie błędy walidacji spowodowane przez formularze zawarte w widoku; w przeciwnym razie musisz ręcznie zachować wszystkie parametry żądania dla kolejnych żądań za <f:param>
pomocą polecenia składniki.
Przykład :
<f:metadata>
<f:viewParam id="user_id" name="id" value="#{bean.user}"
required="true" requiredMessage="Invalid page access. Please use a link from within the system."
converter="userConverter" converterMessage="Unknown user ID."
/>
</f:metadata>
<h:message for="user_id" />
z
private User user;
i @FacesConverter("userConverter")
. Wywołanie strony przez http://example.com/context/user.xhtml?id=123 spowoduje przekazanie id
parametru przez konwerter i ustawienie User
obiektu jako właściwości fasoli.
Ustawia wartość bezpośrednio po skonstruowaniu fasoli.
Wartość ustawiona jest dostępna, @PostConstruct
co umożliwia łatwą inicjalizację / wstępne ładowanie innych właściwości w oparciu o ustawioną wartość.
Nie zezwala na deklaratywną konwersję / walidację w widoku.
Właściwość zarządzana #{param}
nie jest dozwolona w przypadku komponentów bean o szerszym zakresie niż zakres żądania, więc komponent bean musi być @RequestScoped
.
Jeśli polegasz na właściwości zarządzanej, #{param}
która jest obecna w kolejnych żądaniach POST, musisz ją uwzględnić tak, jak <f:param>
w UICommand
komponentach.
Przykład :
@ManagedProperty("#{param.id}")
private Long id;
private User user;
@EJB
private UserService userService;
@PostConstruct
public void init() {
user = userService.find(id);
}
Ale trzeba zarządzać walidacji siebie ilekroć user
jest null
przez bawiąc się FacesContext#addMessage()
czy coś.
Państwo mogą z nich korzystać zarówno gdy oba @PostConstruct
i includeViewParams
są obowiązkowe. Nie będziesz już tylko mógł zastosować szczegółowej konwersji / walidacji.
Zobacz też:
@ManagedProperty
uniemożliwia parametr żądania.<f:event type="preRenderView">
lub w przyszłym formacie JSF 2.2<f:viewAction>
.2 inne różnice:
@ManagedProperty
jest użyteczne tylko z fasolami zarządzanymi przez JSF, a nie z fasolami zarządzanymi przez CDI (@Named
);<f:viewParam>
działa tylko z parametrami żądań GET.źródło