Primefaces Datagrid对话框未使用选定值进行更新

时间:2013-12-29 01:53:11

标签: java jsf jsf-2 primefaces datagrid

我有关于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;
}

}

如果有人能指出我正确的方向,那将是伟大的。对于这篇巨大的帖子感到抱歉,它需要一些解释才能使它变得连贯。希望这是有道理的。感谢。

1 个答案:

答案 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>