咨询清单在Primefaces中投射一个对象?

时间:2013-09-27 15:44:11

标签: jsf primefaces datatable parameter-passing

我有一个带有primefaces的数据表,加载了大约三条记录,碰巧我在一列inputText中,碰巧按钮在datable记录之外,然后单击我要记录的按钮,捕获我inputText值,并更新每个dataTable的记录。

    <p:dataTable id="dataTable" var="confParamGen" value="#{regRolMB.paramLdap}"
        rowIndexVar="rowIndex"> 
        <p:column>
            <f:facet name="header" >
                <h:outputText value="N°" />
            </f:facet>
            <h:outputText value="#{rowIndex+1}" />
        </p:column>
        <p:column>
            <f:facet name="header">
                <h:outputText value="Number Long" />
            </f:facet>
            <h:outputText value="#{confParamGen.numberCort}" />
        </p:column> 
        <p:column>
            <f:facet name="header">
                <h:outputText value="Value Role" />
            </f:facet>
            <p:inputText value="#{confParamGen.valuesRole}" style="width: 200px;" />
        </p:column> 
</p:dataTable>

<p:commandButton value="Save" rendered="#{regRolMB.showButtonUpdate}"
actionListener="#{regRolMB.actualizarRol}" styleClass="positionButton"> 
    <f:attribute name="confParamGen" value="#{confParamGen}" />
</p:commandButton>

在控制器中我已经这样做了,但是它可以投射Arraylist。

public void updateRol(ActionEvent event) {
    List<DateGeneral> rolConPar = new ArrayList<DateGeneral>();
    rolConPar = ((ArrayList<DateGeneral>) event.getComponent().getAttributes().get("confParamGen"));
    for(DateGeneral dato: rolConPar){
        System.out.println("===> "+dato.getValuesRole());
    }
}   

我收到此错误,虽然问题不是inputText的修改数据捕获,只捕获从DataTable加载的数据

java.lang.ClassCastException: com.bbva.sca.adm.bean.DatoGeneral cannot be cast to java.util.ArrayList

2 个答案:

答案 0 :(得分:2)

由于您实际上已将ClassCastException的实例设置为此属性,因此引发了DatoGeneral

<f:attribute name="confParamGen" value="#{confParamGen}" />

这显然不是List<DatoGeneral>(或List<DateGeneral>或您在粗略过度简化/翻译代码时所做的错误;只需在代码中始终使用英语)。从技术上讲,您可以通过传递列表本身来解决它:

<f:attribute name="confParamGen" value="#{regRolMB.paramLdap}" />

毕竟,这种方法没有任何意义。您的唯一目的似乎只是收集提交的值。在这种情况下,您似乎对JSF来说是全新的,并且还没有完全理解为什么要使用JSF以及它具备的功能。 JSF已使用提交的值更新了模型值。您只需要直接访问<p:dataTable value>后面的相同列表。

public void actualizarRol(ActionEvent event) {
    for(DateGeneral dato: paramLdap){
        System.out.println("===> "+dato.getValuesRole());
    }
}  

这样你就可以摆脱整个<f:attribute>

答案 1 :(得分:0)

我的数据表加载如下:

public ArrayList<DatoGeneral> getParamLdap() {
    try{
        if(codSistema != null){             
            confParamGen = new ArrayList<DatoGeneral>();
            confParamGen = datoGeneralService.obtenerParamGen(sistema.getConfLdap().getCdCodigo());
        }
    }catch(Exception e){
        e.printStackTrace();
    }
    return (ArrayList<DatoGeneral>) confParamGen;
}