重新呈现的组件无法正常工作

时间:2013-09-23 20:11:19

标签: jsf richfaces

我在JSF中创建一个视图,在使用a4j:commandButton执行某些操作后,会重新呈现某些元素。例如,我单击一个按钮,该按钮调用支持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

1 个答案:

答案 0 :(得分:0)

删除多个表单,将所有内容包装在一起,然后在需要限制执行范围时使用。