Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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
Javascript 调用在循环中返回JSF视图Id的有状态bean操作来呈现PDF_Javascript_Html_Jsf_Seam2 - Fatal编程技术网

Javascript 调用在循环中返回JSF视图Id的有状态bean操作来呈现PDF

Javascript 调用在循环中返回JSF视图Id的有状态bean操作来呈现PDF,javascript,html,jsf,seam2,Javascript,Html,Jsf,Seam2,有没有一种方法可以调用一个有状态Bean操作来多次(在一个循环中)使用JSF呈现PDF?我尝试通过Javascript实现,在Javascript中,我为要呈现的每个PDF作业创建的每个按钮上都会调用.click()事件。xhtml如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

有没有一种方法可以调用一个有状态Bean操作来多次(在一个循环中)使用JSF呈现PDF?我尝试通过Javascript实现,在Javascript中,我为要呈现的每个PDF作业创建的每个按钮上都会调用.click()事件。xhtml如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:s="http://jboss.com/products/seam/taglib"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:a="http://richfaces.org/a4j"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:rich="http://richfaces.org/rich">

<ui:composition>    
    <div id="dataSizingDivGrowth">
            <f:subview id="fbiAdminId" rendered="#{user.FBIAdmin}">
                <h:inputHidden value="#{pdfPrinter.emailsSize}" id="emailSizeId"/>
                <h:inputHidden value="#{pdfPrinter.downloadIds}" id="downloadIds"/>             
                <br />
                <table>
                    <tr>
                        <td colspan="4" align="center">
                            <button type="button" onclick="savePDF();">Send Emails</button>
                            <c:forEach items="#{pdfPrinter.downloadIdsArr}" var="value">                                
                                <h:form id="emailAutoForm-#{value}" target="_blank">
                                    <h:inputHidden value="#{pdfPrinter.currDownloadId}" id="currDownloadId-#{value}"/>
                                    <h:commandButton action="#{pdfPrinter.emailAutoCD()}" id="savePDFId-#{value}" style="display:none"/>
                                </h:form>
                            </c:forEach>                                                                                                                                
                        </td>
                    </tr>
                </table>
            </f:subview>            

    </div>
    <script type="text/javascript">     
        function savePDF() {
            //alert("start saving pdf");
            var emailSize = document.getElementById("emailAuto:fbiAdminId:emailSizeId").value;
            alert("before downloadIdsArr " + emailSize);
            var downloadIds = document.getElementById("emailAuto:fbiAdminId:downloadIds").value;
            var downloadIdsArr = downloadIds.split("?");
            //alert("before getting length");
            //alert(downloadIds);
            //alert(downloadIdsArr.length);
            //alert(downloadIdsArr[0]);

            for ( var i = 0; i &lt; emailSize; i++ ) {
                var j = function(x) {
                    document.getElementById("emailAuto:fbiAdminId:emailAutoForm-" + downloadIdsArr[x] + ":currDownloadId-" + downloadIdsArr[x]).value = downloadIdsArr[x];                              
                    document.getElementById("emailAuto:fbiAdminId:emailAutoForm-" + downloadIdsArr[x] + ":savePDFId-" + downloadIdsArr[x]).click();                 
                }
            j(i);
            }
        }
    </script>
</ui:composition>
</html>


发送电子邮件 函数savePDF(){ //警报(“开始保存pdf”); var emailSize=document.getElementById(“emailAuto:fbiAdminId:emailSizeId”).value; 警报(“下载前发送”+电子邮件大小); var downloadIds=document.getElementById(“emailAuto:fbiAdminId:downloadIds”).value; var downloadIdsArr=downloadIds.split(“?”); //警报(“获取长度前”); //警报(下载ID); //警报(下载到达长度); //警报(下载IDsarr[0]); 对于(变量i=0;i电子邮件大小;i++){ var j=函数(x){ document.getElementById(“emailAuto:fbiAdminId:emailAutoForm-”+downloadIdsArr[x]+”:currldownloadId-“+downloadIdsArr[x])。value=downloadIdsArr[x]; document.getElementById(“emailAuto:fbiAdminId:emailAutoForm-”+downloadIdsArr[x]+”:savePDFId-“+downloadIdsArr[x])。单击(); } j(i); } }

发生的情况是,javascript循环只调用最后一次迭代并执行,而忽略之前的任何内容。任何帮助都将不胜感激。

您希望进入循环的原因是什么?这将导致令人震惊的用户体验。如果您希望用户一次下载多个文件,请在服务器端将它们包装在一个zip中,然后发出一个请求。我的目标是让多个用户请求PDF格式的报告。我试图实现的是让每个用户逐个循环生成PDF,然后将其保存在服务器上的某个位置。不幸的是,当前的体系结构并没有让我变得容易,所以我尝试使用JSF和RenderFilter来完成我的任务。当最终用户发出请求时,只需生成PDF并将其存储在您在服务器中选择的路径中。您可以随时获取所有PDF。不幸的是,请求不是由用户发出的,而是由管理员发出的。这是因为我们根据季度数据发送报告,我们将每季度发送一次报告。那么,你应该在你的帖子中写出来。无论如何,我在任何地方都看不到有状态的需求,我也不明白为什么要在javascript端管理它。只需在服务器中提供一个入口点,该入口点接收您要为其处理报告并执行工作的用户。然后,如果您希望在每个季度发送它们,只需使用预定的cronjob即可。