The following seems to be ignore inside XHTML facelet templates:
Unfortunately, that's by spec. Your best bet is to use @ManagedProperty instead.
public class BackingBean {
@ManagedProperty("#{param.id}")
private Long id;
// ...
}
The only disadvantage is that this doesn't offer the advantage of using declarative conversion/validation by XHTML. You can if necessary do this job in a @PostConstruct method.
Answering my own question so can share solution with code markup (I wish one could put code markup in comments instead of needing an answer, or if one can please advise how):
/** Unlike {@link Tracker}, only tracks within a single request.
*
* This is useful for the idFrom request parameter tracking in combination
* with an idFrom @ManagedProperty.
*
* This can't be done in session scope.
*
* @author darrenkelly
*/
@ManagedBean
@RequestScoped
public class RequestTracker extends All_ {
/** Creates a new instance of RequestTracker */
public RequestTracker() {
}
@EJB private ElementQuery elementQuery;
@ManagedProperty("#{param.idFrom}")
private Long idFrom;
/**
* The id of the element page one came from to reach a tracked overview page.
*
* @return
*/
public Long getIdFrom() {
return idFrom;
}
public void setIdFrom(Long idFrom) {
if (idFrom != null) {
this.idFrom = idFrom;
elementFrom = elementQuery.find(idFrom);
if (elementFrom == null) {
String $error = "No element with identifier idFrom(" + idFrom + ") found as referring element";
JsfUtil.addErrorMessage($error);
}
}
}
private Element elementFrom;
/** The Element from whose page one came to a another page.
*/
public Element getElementFrom() {
return elementFrom;
}
public void setElementFrom(Element elementFrom) {
this.elementFrom = elementFrom;
}
}