Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Primefaces JSF RowEditCancel事件复制从DataTable中删除的行_Jsf_Jsf 2_Primefaces - Fatal编程技术网

Primefaces JSF RowEditCancel事件复制从DataTable中删除的行

Primefaces JSF RowEditCancel事件复制从DataTable中删除的行,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我有两个primefaces数据表A和B,目标是从A向B添加一个项,因此每个数据表有两个ArrayList。 每个数据表都有 监听器被激发,对象在datatable A中被删除,并添加到datatable B中,但datatable A中保留的项是重复的,但是当我在该项中单击时,它抛出一个NOROWAVIABLABLEEException 这是表格 <h:form id="formulario"> <p:accordionPanel id="ap1">

我有两个primefaces数据表A和B,目标是从A向B添加一个项,因此每个数据表有两个ArrayList。 每个数据表都有
监听器被激发,对象在datatable A中被删除,并添加到datatable B中,但datatable A中保留的项是重复的,但是当我在该项中单击时,它抛出一个NOROWAVIABLABLEEException

这是表格

<h:form id="formulario">
    <p:accordionPanel id="ap1">    
        <p:tab title="Examen">                            
           <h:panelGrid columns="2" cellpadding="10">                                                                                                                                                                                       
            </h:panelGrid>              
        </p:tab>
        <p:tab title="Preguntas disponibles" id="tb2">   
            <h:panelGroup id="pg2">        
                <p:dataTable id="dtDisponibles" value="#{examenPregunta.itemsDisponibles}" var="pregunta" 
                             rows="10" paginator="true" 
                             editable="true"
                             paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
                             rowsPerPageTemplate="5,10,15" lazy="true" >                        
                        <f:facet name="header">
                            <h:outputText value="Preguntas disponibles"/>
                        </f:facet>


                    <!--"  <p:ajax event="rowEditCancel" listener="#{examenPregunta.agregarItem}" update="@form"  />--> 

                  <p:ajax event="rowEditCancel" listener="#{examenPregunta.agregarItem}" update=":formulario:ap1:dtSeleccionados :formulario:ap1:dtDisponibles />

                        <p:column headerText="Clave" >                             
                            <h:outputText value="#{pregunta.identificador}"/>
                        </p:column>                        

                        <p:column headerText="Enunciado">                            
                            <h:outputText escape="false" value="#{pregunta.enunciado}"/>
                        </p:column>
                        <p:column>                            
                                <p:rowEditor />                                                        
                        </p:column>
            </p:dataTable>                
        </h:panelGroup>
    </p:tab>

    <p:tab title="Preguntas seleccionadas" id="tab3">
        <h:panelGroup id="pg3">
            <p:dataTable  id="dtSeleccionados" value="#{examenPregunta.itemsSeleccionados}" 
                          editable="true"
                          var="pregunta" rows="10" paginator="true" 
                          paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
                          rowsPerPageTemplate="5,10,15" lazy="true" >
                        <f:facet name="header">
                            <h:outputText value="Preguntas seleccionadas"/>
                        </f:facet>

                <!--<p:ajax event="rowEditCancel" listener="#{examenPregunta.quitarItem}" update="@form"  /> --> 

                                                                                                        <p:ajax event="rowEditCancel" listener="#{examenPregunta.quitarItem}" update=":formulario:ap1:dtDisponibles :formulario:ap1:dtSeleccionados"  />
                        <p:column headerText="Clave" >                             
                            <h:outputText value="#{pregunta.identificador}"/>
                        </p:column>


                        <p:column headerText="Enunciado">
                            <h:outputText escape="false" value="#{pregunta.enunciado}"/>
                        </p:column>

                        <p:column>
                            <p:rowEditor /> 
                        </p:column>

            </p:dataTable> 
        </h:panelGroup>
    </p:tab>

</p:accordionPanel>
</h:form>            

你的代码看起来不错

也许这是这个组合的一个缺陷,accordionPanel->datatable->ajax->rowEdit


这是我的工作


为什么你要用lazy=“true”?

来处理庞大的数据集。。。但是我没有做伊托克,因为你需要实现一个懒散的数据模型。只有lazy=“true”不起作用,并且没有任何影响。您是否已显式地将JSF实现配置为忽略标记中的注释?如果尚未执行,则仍将执行其中已注释的
rowEditCancel
事件定义。
@ManagedBean
@SessionScoped
public class ExamenPregunta implements Serializable {  
    private static final long serialVersionUID = 1L;       
    private Date currentDate = new Date();
    private String idExamen = "";
    private ITOAssessmentTest examen =  null;    

    ITOAssessmentItem pregunta = new ITOAssessmentItem();
    ITOAssessmentItem[] arrPregunta = null;

    private  ArrayList<ITOAssessmentItem> itemsDisponibles = new ArrayList<ITOAssessmentItem>();
    private  ArrayList<ITOAssessmentItem> itemsSeleccionados = new ArrayList<ITOAssessmentItem>();






    public void agregarItem(RowEditEvent event){
        System.out.println("agregarItem");        

       itemsDisponibles.remove((ITOAssessmentItem) event.getObject());
       itemsSeleccionados.add((ITOAssessmentItem) event.getObject());
    }

    public void quitarItem(RowEditEvent event){               
        System.out.println("quitarItem");        
        itemsDisponibles.add((ITOAssessmentItem) event.getObject());
        itemsSeleccionados.remove((ITOAssessmentItem) event.getObject());        
    }

     /**
     * @return the itemsDisponibles
     */
    public ArrayList<ITOAssessmentItem> getItemsDisponibles() {
        return itemsDisponibles;
    }

    /**
     * @return the itemsSeleccionados
     */
    public ArrayList<ITOAssessmentItem> getItemsSeleccionados() {
        return itemsSeleccionados;
    }

}
            <p:column>
                <p:commandButton value="foo" action="#{examenPregunta.doAction(pregunta)}"
                    process="@this"
                    update=":formulario:dtDisponibles :formulario:dtSeleccionados"></p:commandButton>
            </p:column>