保存复选框状态在JSF Primefaces中重新加载页面后

时间:2015-04-08 16:14:10

标签: primefaces jsf-2.2

我在primefaces 5中使用“DataTable - Selection”,(http://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml)检查选定的行,但是当我重新加载页面时,复选框未选中,我如何保持状态会话中的复选框?

**

********* ********数据表

**

<p:dataTable  var="var" value="#{vistaBean.listaFichero}" rowKey="#{var.nombre}" paginator="true" rows="10"  
                 selection="#{vistaBean.selectFichero}">  

        <f:facet name="header">  
            Votar ProductBox 
        </f:facet>  


        <p:column  headerText="Votar" selectionMode="multiple"/>   

        <p:column headerText="Nombre del Fichero">
         <h:outputText value="#{var.nombre}" />
        </p:column>

        <p:column headerText="Ver/Descargar">
          <h:commandLink id="pdf" action="#{vistaBean.downLoad}">
                <f:setPropertyActionListener target="#{vistaBean.ruta}" value="#{var.ruta}" />
                <h:graphicImage library="images" name="pdf.png" />
                 </h:commandLink>
        </p:column>  


    </p:dataTable>  


     <p:commandButton value="Guardar Votos" action="#{vistaBean.addVoto()}" update="msgs"/>


    <p:commandButton value="Ver Votos" update="display" oncomplete="PF('dlg').show()" icon="ui-icon-check" inmediate="true"/>

    <p:dialog header="Product Box Seleccionados" modal="true" showEffect="clip" widgetVar="dlg" resizable="false">
        <p:outputPanel id="display">

            <p:dataList value="#{vistaBean.selectFichero}" var="v">
                #{v.nombre}

            </p:dataList>


        </p:outputPanel>
    </p:dialog>

2 个答案:

答案 0 :(得分:0)

我通过安装较新版本的Primefaces解决了这个问题,5.2,我有5.1并且它有这个bug。

答案 1 :(得分:-1)

这是您设置会话变量的方式:

FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
session.setAttribute("foo", "bar");

这是你获取会话变量的方法:

FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements())
{
  String attr = (String)e.nextElement();
  System.err.println("      attr  = "+ attr);
  Object value = session.getValue(attr);
  System.err.println("      value = "+ value);
}

您唯一的任务是将复选框的状态保存到会话中,然后加载它。