Przed tym, gdy zacząłem używać JSF, JSTL umożliwiało mi następującą funkcję:
<c:if test="${not (empty request.error)}">
Error: ${request.getAttribute("error")}
</c:if>
Pozwalała ona wyświetlić zawartość atrybutu request, jeżeli istniał.
Po przeniesieniu layoutu w technologię JSF taki sam kod daje mi błąd:
/login.xhtml @24,51 test="${not (empty request.error)}" /login.xhtml @24,51 test="${not (empty request.error)}": Property 'error' not found on type org.apache.catalina.connector.RequestFacade
I tu go rozumiem - nie znajduje parametru error w beansie RequestFacade.
To jest chyba pierwsze nieporozumienie, gdyż mi chodzi o pobranie atrybutu z requestu.
Kolejny sposób, w jaki chciałem to rozwiązać było zastosowanie takiej funkcji:
<h:outputText value="#{param['error']}" />
param ma być tutaj grupą wszystkich wartości: atrybutów, parametrów itd. - jednak w żaden sposób nie zwraca niczego.
Treść atrybutu error jest ustawiana z poziomu servletu. Na 100% istnieje w przypadku popełnienia błędu w formularzu.
Cały kod login.xhtml:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
template="./template.xhtml"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<ui:define name="userBar">
<form method="POST" action="Login">
<table>
<tr>
<td>Login</td>
<td><input type="text" name="login" /></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Login" /></td>
</tr>
</table>
</form>
<c:if test="${not (empty request.error)}">
Error: ${request.getAttribute("error")}
</c:if>
<h:outputText value="#{param['error']}" />
</ui:define>
<ui:define name="content">
content
</ui:define>
</ui:composition>
Zna ktoś jakiś sposób na pobranie tego atrybutu i wyświetlenie go? Dobrze by było, abym mógł przy wyświetlaniu uwzględnić swój dodatkowy HTML. Przetrzymuje on wartości w stylu "Invalid username or password".