【问题标题】:Data Table Primefaces数据表 Primefaces
【发布时间】:2014-07-09 18:37:20
【问题描述】:

我正在使用 JSF Primefaces,我想在其中进行搜索并显示结果,但结果不会显示,我正在使用 Result 类型执行此操作,并且在 JSF 2.1 中使用 MyFaces tomahawk 实现了这样的功能,但现在使用 primefaces 这不起作用,这是我的代码

<h:form id="buscar_sucursal">
        <p:panel style="width: 800px">
            <h:panelGrid columns="5">
                <h:outputText value="Criterio: " />
                <p:selectOneMenu id="citerio" value="#{SucursalesBean.criterio}">
                    <f:selectItem itemValue="1" itemLabel="CVE SUCURSAL"></f:selectItem>
                    <f:selectItem itemValue="2" itemLabel="NOMBRE"></f:selectItem>
                </p:selectOneMenu>
                <h:outputText value="Valor: " />
                <p:inputText id="valor" value="#{SucursalesBean.valor}"></p:inputText>
                <p:commandButton action="#{SucursalesBean.buscar}" value="Buscar"></p:commandButton>
            </h:panelGrid>
        </p:panel>
        <p:dataTable id="sucursalesTable" var="suc" value="#{SucursalesBean.sucursalesTable}">
            <p:column headerText="Id">
                <h:outputText value=""></h:outputText>
            </p:column>
            <p:column headerText="Cve">
                <h:outputText value="#{suc.cve_sucursal}"></h:outputText>
            </p:column>
            <p:column headerText="Sucursal">
                <h:outputText value="#{suc.sucursal}"></h:outputText>
            </p:column>
            <p:column headerText="Domicilio">
            </p:column>
            <p:column headerText="Contraseña">
            </p:column>
            <p:column headerText="Accion">
                <h:commandLink value="Editar"></h:commandLink> / 
                <h:commandLink value="Eliminar"></h:commandLink>
            </p:column>
        </p:dataTable>
    </h:form>

还有我的 ManagedBean 的代码

public Result getSucursalesTable()
{
    return this.sucursalesTable;
}
public void setSucursalesTable(Result sucursalesTable)
{
    this.sucursalesTable = sucursalesTable;
}
public void buscar() throws ClassNotFoundException
{
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    this.valor = request.getParameter("buscar_sucursal:valor");

    try
    {
        LoginBean loginBean = (LoginBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("LoginBean");
        Connection conn = loginBean.getConectar_db();
        //int id_empresa = loginBean.getId_empresa();
        ArrayList<SucursalesBean> al = new ArrayList<SucursalesBean>();
        st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        ResultSet rs = null;
        //ResultSet rs = st.executeQuery("SELECT *FROM clientes WHERE id_cliente='"+request.getParameter("id_cliente")+"';"); // AND id_contribuyente='' AND id_empresa=''
        //if(request.getParameter("sucursales:id_sucursal") != null)
            //rs = st.executeQuery("SELECT *FROM sucursales WHERE id_sucursal='"+request.getParameter("sucursales:id_sucursal")+"' AND id_empresa='"+loginBean.getId_empresa()+"' AND id_contribuyente='"+loginBean.getId_contribuyente()+"';"); // AND id_contribuyente='' AND id_empresa=''
        if(getCriterio().toString() != null)
        {
            if(getCriterio().toString().equals("1"))
                rs = st.executeQuery("SELECT cve_sucursal,sucursal FROM sucursales WHERE cve_sucursal='"+this.valor+"' AND id_empresa='"+loginBean.getId_empresa()+"' AND id_contribuyente='"+loginBean.getId_contribuyente()+"';");
            if(getCriterio().toString().equals("2"))
                rs = st.executeQuery("SELECT *FROM sucursales WHERE sucursal LIKE '%"+this.valor+"%' AND id_empresa='"+loginBean.getId_empresa()+"' AND id_contribuyente='"+loginBean.getId_contribuyente()+"';");
        }
        this.sucursalesTable = ResultSupport.toResult(rs);
        //this.sucursalesTable = rs;
        //setSucursalesTable(ResultSupport.toResult(rs));

        /*while(rs.next())
        {
            //out.println("<tr><td>"+rs.getString("sucursal")+"</td><td>"+rs.getString("cve_sucursal")+"</td><td>"+rs.getString("telefono")+"</td><td>"+rs.getString("e_mail")+"</td><td>"+rs.getString("calle")+"</td><td><a href='sucursales.jsp?accion=editar&id_sucursal="+rs.getString("id_sucursal")+"'>Editar</a></td><td></td></tr>");
            //setId_sucursal(String.valueOf(rs.getInt("id_sucursal")));
            setCve_sucursal(rs.getString("cve_sucursal"));
            setSucursal(rs.getString("sucursal"));
            al.add(this);
        }
        this.sucursalesTable = al;*/
    }
    catch(SQLException ex)
    {
    }

}

我不想使用序列化对象来使用 List 类型,因为我认为它需要很多代码来做一些应该很简单的事情,即使这不是最好的方法。

我怀疑 Primefaces 是否支持 Result 类型,或者我对此感到迷茫,也许这就是这种方法不起作用的原因。

任何帮助我都非常感谢提前感谢

【问题讨论】:

    标签: jsf primefaces datatable


    【解决方案1】:

    在我看来,您已将 h:commandButton 转换为 p:commandButton。第一个默认使用非 ajax 请求,但后者使用 ajax 请求。如果正确,您只需要告诉按钮在请求期间要处理哪些组件并在请求后更新:

    <p:commandButton action="#{SucursalesBean.buscar}" 
                     value="Buscar" 
                     process="criterio valor"
                     update="sucursalesTable" />
    

    或者使用非ajax请求:

    <p:commandButton action="#{SucursalesBean.buscar}" 
                     value="Buscar" 
                     ajax="false" />
    

    【讨论】:

    • 您好,感谢您回答我的问题,我已经尝试使用 ajax="false",正如您所说,默认设置为 true,现在在请求后刷新页面并显示下一个错误:
    • /sucursales.xhtml @71,63 value="#{suc.cve_sucursal}": Propiedad 'cve_sucursal' no hallada en el tipo javax.servlet.jsp.jstl.sql.ResultImpl
    • 看来 SucursalesBean.sucursalesTable 是 Result 类型,它不是一个集合。我相信,数据表只能显示集合中的内容。所以我不知道什么对你来说最简单,但我认为你需要一些 DTO 类来包含查询结果,比如这里:stackoverflow.com/questions/8597382/…
    • 嗨 Jaqen 我已经在很多网站上看到了 DTO 类容器方法,但问题是当你的应用程序模块太多时,这些类容器会增长很多,我的大多数示例也是如此看到的是视图范围的bean,它消耗更多的资源,我的例子是请求范围的vean,我不知道是否有事情要做,但奇怪的是这与MyFaces一起工作,但现在我已经用Primefaces实现了不要,我会尝试用 DTO 类压缩我的代码,看看发生了什么,也许如果我向你展示这两个代码,你会得到一个更好的主意
    • 您好,很抱歉等了很长时间才得到答案,但在打破了我的头很长一段时间后,我才意识到像大多数论坛所说的那样,prime faces 不支持 Result 或 ResultSet 类型至少不是在我的版本中,所以在我的代码中,我将 p:dataTable 替换为 h:dataTable 并且它可以工作,现在问题是使用 p:commandLink 传递变量来重新加载表格以更新数据,提前感谢您的帮助,如有任何变化,我会及时通知您
    猜你喜欢
    • 2011-09-08
    • 2011-12-25
    • 1970-01-01
    • 2015-03-04
    • 2012-11-13
    • 2011-09-04
    • 2019-07-13
    • 2014-02-03
    • 2017-08-17
    相关资源
    最近更新 更多