2013-09-23 71 views
0

我在JSF中創建一個視圖,其中一些元素執行某些操作後會重新渲染一些元素。例如,我點擊一個調用支持bean方法的按鈕,例如executeProcess(這會將進程添加到列表中),以及何時完成更新數據表(顯示可用進程)。數據表還有其他一些按鈕來執行每個進程的特定操作,但是當我按下其中一個按鈕時,頁面似乎完全重新加載而沒有調用該操作,那麼如果我再次按下相同的按鈕,它將起作用。發生什麼事?重新渲染的組件不能正常工作

組件列表的執行:

<div class="line_left" style="float:right"> 
    <a4j:outputPanel id="execProcessPanel" layout="block" 
     ajaxRendered="true"> 

     <ui:fragment rendered="#{tapeTapeForm.size > 0}"> 

      <h:form id="executeProcess"> 
       <h:outputText value="Ejecuta Proceso" /> 
       <br /> 

       <h:outputLabel id="inputFilesLabel" for="inputFile" value="Archivo" /> 
       <h:selectOneListbox id="inputFile" size="5" required="true" 
        requiredMessage="Debes seleccionar un archivo" 
        value="#{tapeTapeForm.inputFile}"> 
        <f:selectItems value="#{tapeTapeForm.inputFiles}" var="file" 
         itemLabel="#{file}" itemValue="#{file}" /> 
       </h:selectOneListbox> 
       <br /> 

       <h:message for="inputFile" errorClass="" /> 
       <br /> 

       <a4j:commandButton value="Ejecutar" styleClass="button" 
        action="#{tapeTapeForm.executeProcess}" 
        render="resultListPanel execProcessPanel messages" 
        limitRender="true"> 
        <f:setPropertyActionListener value="0" 
         target="#{tapeTapeForm.tipoProceso}" /> 
       </a4j:commandButton> 
       <a4j:commandButton value="Revisión" styleClass="button" 
        action="#{tapeTapeForm.executeProcess}" 
        render="resultListPanel execProcessPanel messages" 
        limitRender="true"> 
        <f:setPropertyActionListener value="1" 
         target="#{tapeTapeForm.tipoProceso}" /> 
       </a4j:commandButton> 
      </h:form> 

     </ui:fragment> 
    </a4j:outputPanel> 
</div> 

零件數據表:

<a4j:outputPanel id="resultListPanel" layout="block" 
    ajaxRendered="true"> 
    <h2> 
     <h:outputText value="Listado de Procesos Tape to Tape" /> 
    </h2> 

    <rich:dataTable id="resultList" var="item" rows="0" 
     value="#{tapeTapeForm.processes}" noDataLabel="Sin Procesos"> 
     <rich:column sortable="true" sortBy="#{item.id}"> 
      <f:facet name="header"> 
       <h:outputText value="ID" /> 
      </f:facet> 
      <center> 
       <h:outputText value="#{item.id}" /> 
      </center> 
     </rich:column> 

     <rich:column> 
      <f:facet name="header"> 
       <h:outputText value="Nombre Archivo" /> 
      </f:facet> 
      <center> 
       <h:outputText value="#{item.inputFileName}" /> 
      </center> 
     </rich:column> 

     <rich:column> 
      <f:facet name="header"> 
       <h:outputText value="Archivo Salida" /> 
      </f:facet> 
      <center> 
       <h:outputText value="#{item.outputFileName}" 
        title="Clic para descargar el archivo de salida" /> 
      </center> 
     </rich:column> 

     <rich:column> 
      <f:facet name="header"> 
       <h:outputText value="Tipo Proceso" /> 
      </f:facet> 
      <center> 
       <h:outputText value="Reporte" 
        title="Este proceso generará un reporte" 
        rendered="#{item.tipoProceso == 0}" /> 
       <h:outputText value="Revisión" 
        title="Se realizará una revisión del archivo" 
        rendered="#{item.tipoProceso == 1}" /> 
      </center> 
     </rich:column> 

     <rich:column> 
      <f:facet name="header"> 
       <h:outputText value="Estatus" /> 
      </f:facet> 
      <center> 
       <h:outputText value="#{item.status.description}" 
        title="#{item.status.detail}" /> 
      </center> 
     </rich:column> 

     <rich:column> 
      <f:facet name="header"> 
       <h:outputText value="Progreso" /> 
      </f:facet> 
      <rich:progressBar value="#{item.avance}" minValue="0" 
       enabled="false" rendered="#{item.status.id == 3}" 
       maxValue="#{item.total}" label="#{item.avance}/#{item.total}" /> 
     </rich:column> 

     <rich:column> 
      <f:facet name="header"> 
       <h:outputText value="Detener" /> 
      </f:facet> 
      <h:form rendered="#{item.status.id == 2 or item.status.id==3}"> 
       <h:commandLink action="#{tapeTapeForm.stopProcess}" value="STOP" 
        onclick="#{rich:component('ajaxLoadingModalBox')}.show()"> 
        <f:setPropertyActionListener target="#{tapeTapeForm.id}" 
         value="#{item.id}" /> 
       </h:commandLink> 
      </h:form> 
     </rich:column> 

     <rich:column> 
      <f:facet name="header"> 
       <h:outputText value="Eliminar" /> 
      </f:facet> 
      <h:form rendered="#{item.status.id !=2 and item.status.id != 3}"> 
       <h:commandLink action="#{tapeTapeForm.removeProcess}" 
        value="ELIMINAR"> 
        <f:setPropertyActionListener target="#{tapeTapeForm.id}" 
         value="#{item.id}" /> 
       </h:commandLink> 
      </h:form> 
     </rich:column> 

    </rich:dataTable> 
</a4j:outputPanel> 

我使用RichFaces的4.2.2

+0

您確定JSF版本是4.2.2?或者是JBoss版本 – omainegra

+0

@omainegra:它可能只是RichFaces版本。 – BalusC

+0

對不起,富貴臉版 – Oscar

回答

0

擺脫了多種形式,在一個包裹一切然後使用,如果你需要限制執行的範圍。