Jsf 数据表素数面

Jsf 数据表素数面,jsf,primefaces,datatable,Jsf,Primefaces,Datatable,我正在使用JSF Primefaces,我想在中进行搜索并显示结果,但结果不会显示,我使用的是结果类型,并且在JSF 2.1中使用MyFaces tomahawk实现了类似的功能,但现在使用Primefaces时,这不起作用,下面是我的代码 <h:form id="buscar_sucursal"> <p:panel style="width: 800px"> <h:panelGrid columns="5">

我正在使用JSF Primefaces,我想在中进行搜索并显示结果,但结果不会显示,我使用的是结果类型,并且在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)
    {
    }

}
我不想为了使用列表类型而使用序列化对象,因为我认为做一些简单的事情需要太多的代码,即使这不是最好的方法

我的疑问是Primefaces是否支持结果类型,或者我是否对此失去了兴趣,也许这就是为什么这个方法不起作用


我非常感谢您的任何帮助,请提前感谢

在我看来,您已将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.ResultImplIt似乎是SucursalesBean.sucursalesTable的类型是Result,它不是集合。我相信datatable只能显示集合中的内容。所以我不知道什么对你来说最简单,但我认为你需要一些DTO类来包含查询结果,比如:嗨,Jaqen,我在很多网站上见过DTO类容器方法,但问题是当你有一个应用程序太多模块时,这些类容器会增长很多,我看到的大多数例子都是视图范围的bean,它会消耗更多的资源,而我的例子是请求范围的vean,我不知道是否有什么需要做的,但奇怪的是,这是用MyFaces实现的,但现在我用Primefaces实现了它,我会尝试用DTO类压缩我的代码,看看发生了什么,也许如果我向你展示这两个代码,你会得到一个更好的想法,我很抱歉等待了很长时间的答案,但在打破我的头很长一段时间后,我刚刚意识到prime faces不支持Result或ResultSet类型,正如大多数fórums所说的,至少在我的版本中不支持,因此在我的代码中,我将p:dataTable替换为h:dataTable,它可以正常工作,现在的问题是p:commandLink to pass变量用于重新加载表单以计算数据,提前感谢您的帮助,任何变化我都会与你保持联系