我开始使用PrimeFaces 5.2,我的IDE是Eclipse Luna 4.4.2,Java 1.7和JSF 2.1。
我有一个带有 DataTable 的视图,其中一个名称包含两个 CommandButtons ,一个用于编辑,另一个用于删除。按下编辑按钮时,我会显示一个模态对话框,其中包含一个外部xhtml文件,该文件也有自己的 ManagedBean 。
我想将所选对象从DataTable传递到外部xhtml的 ManagedBean ,以便其字段填充其中的信息。
我的 Excepciones.xhtml 如下所示:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/facelets/templates/plantillaPrincipal.xhtml">
<ui:define name="mainBody">
<h:form id="form">
<p:dataTable var="excepcion" value="#{excepcionesView.lazyModel}"
paginator="true" rows="10" paginatorPosition="bottom"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="5,10,15" selectionMode="single"
selection="#{excepcionesView.selectedExcepcion}" id="excepcionTable"
lazy="true">
<p:ajax event="rowSelect" listener="#{excepcionesView.onRowSelect}"
update=":form:excepcionDetail"
oncomplete="PF('excepcionDialog').show()" />
<p:column headerText="Id" sortBy="#{excepcion.id}">
<h:outputText value="#{excepcion.id}" />
</p:column>
....
<p:column headerText="Acciones">
<p:commandButton icon="ui-icon-pencil" action="#{excepcionesView.viewExcepcionEditar}" >
<f:setPropertyActionListener value="#{excepcion}"
target="#{excepcionesView.selectedExcepcion}" />
</p:commandButton>
...
</p:column>
</p:dataTable>
...
</h:form>
</ui:define>
</ui:composition>
ManagedBean :
@ManagedBean(name="excepcionesView")
@ViewScoped
public class ExcepcionesView implements Serializable{
private LazyDataModel<Excepcion> lazyModel;
private Excepcion selectedExcepcion;
@ManagedProperty("#{excepcionService}")
private ExcepcionService service;
@PostConstruct
public void init() {
lazyModel = new ExcepcionDataModel(service.createExcepciones(200));
}
public void viewExcepcionEditar() {
FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("selectedExcepcion", selectedExcepcion);
Map<String,Object> options = new HashMap<String, Object>();
options.put("modal", true);
options.put("draggable", false);
options.put("resizable", false);
options.put("contentHeight", 320);
RequestContext.getCurrentInstance().openDialog("ExcepcionEdicion", options, null);
}
...
}
如您所见,我调用方法 viewExcepcionEditar 来存储所选行并显示一个对话框,该对话框将加载我的 ExcepcionEdicion.xhtml :
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<h:outputStylesheet library="theme" name="css/style.css" />
</h:head>
<h:body>
<h:form id="productoEditarForm">
<p:panelGrid id="productoEditarGrid" styleClass="tablaSinBorde" columns="2" >
<p:outputLabel for="nombreTxt" value="Nombre: "/>
<h:inputText id="nombreTxt" value="#{editarExcepcionView.excepcion.nombre}" />
<p:outputLabel for="ldcTxt" value="Línea de Crédito: "/>
<h:inputText id="ldcTxt" value="#{editarExcepcionView.excepcion.lineaCredito}"/>
</p:panelGrid>
<p:commandButton id="aceptarBtn" value="Aceptar" />
<p:commandButton id="cancelarBtn" value="Cancelar" />
</h:form>
</h:body>
</html>
它的bean包含:
@ManagedBean(name="editarExcepcionView")
@ViewScoped
public class EditarExcepcionView implements Serializable{
private String excepcionId;
private Excepcion excepcion;
public EditarExcepcionView(){
System.out.println("hey");
excepcion = (Excepcion) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("selectedExcepcion");
System.out.println("excepcion " + excepcion.getNombre());
}
....
}
在它的构造函数中,我尝试读取我放置的参数,但它总是为空。
如何在这些bean之间传递此对象,以便可以在我的模态对话框中读取和显示来自所述对象的信息?