Есть несколько способов сохранить идентификатор из исходного GET URL. Я не пытаюсь быть исчерпывающим.
Добавить параметр к commandLink
<h:commandLink action="#{beanWithId.save}" value="Save">
<f:param name="ID" value="#{param.ID}" />
</h:commandLink>
При каждом нажатии на ссылку идентификатор будет установлен из параметра.
Использовать скрытое поле
<h:form>
<h:inputHidden value="#{beanWithId.id}" />
<p>ID: <h:outputText value="#{beanWithId.id}" /></p>
<p>Info: <h:inputText value="#{beanWithId.info}" /></p>
<p><h:commandButton action="#{beanWithId.save}" value="Save" /></p>
</h:form>
Каждый раз, когда форма публикуется, идентификатор будет установлен из формы.
Сохранение URL
Поскольку URL-адрес формы не включает исходный запрос, сообщение удалит идентификатор из URL-адреса на панели браузера. Это можно исправить с помощью перенаправления на стороне сервера после выполнения действия.
public String save() {
System.out.println("Saving changes to persistence store: id=" + id);
redirect();
return null; // no navigation
}
private void redirect() {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext ext = context.getExternalContext();
UIViewRoot view = context.getViewRoot();
String actionUrl = context.getApplication().getViewHandler().getActionURL(
context, view.getViewId());
try {
// TODO encode id value
actionUrl = ext.encodeActionURL(actionUrl + "?ID=" + id);
ext.redirect(actionUrl);
} catch (IOException e) {
throw new FacesException(e);
}
}