Primefaces JSF行编辑取消事件复制从数据表中删除的行

时间:2014-10-10 19:41:44

标签: jsf jsf-2 primefaces

我有两个主要数据表A和B,目标是从A到B添加一个项目,所以每个数据表都有两个ArrayList。 每个数据表都有<p:ajax event="rowEditCancel" listener="#{item.onCancel}" update=":datatableA :datatableB" /> 触发器被触发并且对象在数据表A中被删除并添加到数据表B中但是保留在数据表A中的项是重复的,但是当我单击该项时它会抛出NoRowAvailableException

这是表格

<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>            

这是托管bean

@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;
    }

}

提前致谢!!!

1 个答案:

答案 0 :(得分:0)

你的代码看起来还不错。

也许是这个组合的一个错误:accordionPanel-&gt; datatable-&gt; ajax-&gt; rowEdit。

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

它为我工作。

为什么你有懒惰=“真实”?

相关问题