我有关于primefaces datagrid的问题。我正在关注此示例1,尝试在点击p:commandLink时使用所选值更新对话框。对话不起作用,不显示。我在GlassFish Server 4.0上使用primefaces-4.0。我用bean替换了bean及其方法。
这就是我所做的。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
>
<body>
<ui:composition template="./plantilla/plantillaPrincipal.xhtml">
<ui:define name="content">
<h:form id="form" class="well">
<h1>#{accionesController.tipo}</h1>
<p:dataGrid var="r" value="#{accionesController.lista}" columns="3"
rows="3" paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="3,6,9">
<p:panel header="#{r.title}" style="text-align:center">
<h:panelGrid columns="1" style="width:100%">
<p:graphicImage value="/img/libros/#{r.ubicacion}.jpg"/>
<h:outputText value="#{r.author}" />
<p:commandLink update=":form:carDetail" oncomplete="PF('carDialog').show()" title="View Detail">
<h:outputText styleClass="ui-icon ui-icon-search" style="margin:0 auto;" />
<f:setPropertyActionListener value="#{r}"
target="#{r.libroseleccionado}" />
</p:commandLink>
</h:panelGrid>
</p:panel>
</p:dataGrid>
<p:dialog header="Car Detail" id="carDialog" widgetVar="carDialog" modal="true">
<p:outputPanel id="carDetail" style="text-align:center;">
<p:graphicImage value="/img/libros/#{r.libroseleccionado.ubicacion}.jpg"/>
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="modelNo" value="Model No: " />
<h:outputText id="modelNo" value="#{r.libroseleccionado.author}" />
<h:outputLabel for="year" value="Year: " />
<h:outputText id="year" value="#{r.libroseleccionado.title}" />
</h:panelGrid>
</p:outputPanel>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>
</body>
</html>
我的豆子
@Component()
@ManagedBean
@RequestScoped
@ComponentScan("pe.egcc.eureka.app.layer.service")
public class AccionesController {
@Autowired
private AccionesService accionesService;
private List<Map<String, Object>> lista;
private String tipo;
private Books libroseleccionado;
public void setLibroseleccionado(Books libroseleccionado) {
this.libroseleccionado = libroseleccionado;
}
public Books getLibroseleccionado() {
return libroseleccionado;
}
public String getTipo() {
return tipo;
}
public List<Map<String, Object>> getLista() {
if (lista == null) {
lista = new ArrayList<Map<String, Object>>();
}
return lista;
}
public String consultarLibros() {
String destino;
lista = accionesService.listarLibros();
tipo="Todos los Libros";
destino = "listarLibros";
return destino;
}
public String consultarLibrosLiteratura() {
String destino;
tipo="Libros de Literatura";
lista = accionesService.listarLibrosLiteratura();
destino = "listarLibros";
return destino;
}
public String consultarLibrosInformatica() {
String destino;
tipo="Libros de Informática";
lista = accionesService.listarLibrosInformatica();
destino = "listarLibros";
return destino;
}
public String consultarArticulos() {
String destino;
tipo="Artículos Diversos";
lista = accionesService.listarArticulos();
destino = "listarLibros";
return destino;
}
}
如果有人能指出我正确的方向,那将是伟大的。对于这篇巨大的帖子感到抱歉,它需要一些解释才能使它变得连贯。希望这是有道理的。感谢。
答案 0 :(得分:0)
我在primefaces和twitter bootstrap之间发现了一些兼容性问题,所以我用boostrap模式替换了primefaces模态,但保留了outputPanel以便更新数据并从r.libroelegito更改为accionesController.libroelegido。这是代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:k="http://xmlns.jcp.org/jsf/passthrough">
<h:body>
<ui:composition template="./plantilla/plantillaPrincipal.xhtml">
<ui:define name="content">
<h:form id="form">
<h1>#{accionesController.tipo}</h1>
<p:dataGrid var="r" value="#{accionesController.lista}" columns="3"
rows="3" paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="3,6,9">
<p:panel header="#{r.title}" style="text-align:center">
<h:panelGrid columns="1" style="width:100%">
<p:graphicImage value="/img/libros/#{r.ubicacion}.jpg"/>
<h:outputText value="#{r.book_id}" />
<h:outputText value="#{r.author}" />
<p:commandButton icon="ui-icon-search" update=":form:carDetail" title="View Detail" k:data-toggle="modal" k:data-target="#vermasinformacion">
<f:setPropertyActionListener value="#{r}" target="#{accionesController.libroelegido}" />
</p:commandButton>
</h:panelGrid>
</p:panel>
</p:dataGrid>
<!--</p:dialog>-->
<div class="modal fade" id="vermasinformacion" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="panel panel-default">
<div class="panel-body">
<p:outputPanel id="carDetail" style="text-align:center;">
<legend>#{accionesController.libroelegido.title}</legend>
<p:graphicImage value="/img/libros/#{accionesController.libroelegido.ubicacion}.jpg"/>
<h:panelGrid columns="2" cellpadding="5" style="text-align: left">
<h:outputLabel for="idbook" value="Registro ISBN: " />
<h:outputText id="idbook" value="#{accionesController.libroelegido.book_id}002014" />
<h:outputLabel for="autorlibro" value="Autor :" />
<h:outputText id="autorlibro" value="#{accionesController.libroelegido.author}" />
<h:outputLabel for="preciolibro" value="Precio :" />
<h:outputText id="preciolibro" value="$ #{accionesController.libroelegido.price}" />
<h:commandButton value="Comprar" class="btn btn-primary"/>
<h:commandButton value="Agregar al carrito" class="btn btn-default"/>
</h:panelGrid>
</p:outputPanel>
</div>
</div>
</div>
</div>
</div>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>