我有一个带有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
答案 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;
}