Перейдите к другому представлению, передавая параметр
Моя текущая среда - JRE 1.7, JSF 2.2, Eclipse Luna. На определенной странице (entity_index.xhtml
) моего приложения у меня есть следующая (PrimeFaces) кнопка:
<p:commandButton value="Details" action="entity_details"
ajax="false" onclick="this.form.target='_blank'">
<f:param name="id" value="#{entity.id}" />
</p:commandButton>
Идея состоит в том, чтобы предоставить кнопку, чтобы пользователь мог щелкнуть ее, и некоторые сведения о текущем объекте будут показаны на другой вкладке браузера (страницаentity_details.xhtml
). Это одна кнопка из многих, поэтомуentity_index.xhtml
страница показывает много экземпляров Entity, каждый с кнопкой детализации.
Кнопка работает в том смысле, что открывается новая вкладка и правильная страница (entity_details.xhtml
), но идентификатор объекта никогда не попадает в компонент, который обрабатывает страницу сведений (EntityDetailsMB
). Страница сведений выглядит следующим образом:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:dsi="http://www.cce.ufpr.br"
template="/private/template/sbadmin.xhtml">
<f:metadata>
<f:viewParam name="id" value="#{entityDetailsMB.id}"/>
</f:metadata>
<ui:define name="content">
<h2 class="page-header">#{entityDetailsMB.entity.name}</h2>
<h:form id="form">
...
</ui:composition>
Обратите внимание, что есть<f:metadata/>
элемент, предназначенный для захвата параметра, отправленного со страницы индекса, и передачи егоid
недвижимость вEntityDetailsMB
где есть следующее:
public Entity getEntity() {
return entityById(id);
}
public Long getId() {
return id;
}
public void setId(Long value) {
id = value;
}
ПосколькуsetId()
метод никогда не вызывается,getEntity()
всегда возвращаетсяnull
.
Чего не хватает, чтобы заставить его работать?