簡體   English   中英

防止多次單擊ah:commandButton,該按鈕在單擊后專門打印報告

[英]Preventing more than one click on a h:commandButton that specifically prints a report after clicking

好吧,我基本上已經殺死了Google尋找解決方案。

使用richfaces和JSF。

基本上,我有ah:commandButton,它一旦單擊就會打印報告,但是如果多次單擊,則DownloadUtils.download()方法將被中斷,然后中斷。 我需要避免這種情況。

我試圖禁用“ onclick”。 我試圖禁用超時功能-在此處找到解決方案: 單擊后禁用`<h:commandButton>`,但應觸發操作

但是這些基本上要么根本不觸發操作,要么在下載過程中達到某個點然后停止。 它不返回任何內容,因此沒有下載報告。

由於下載,您不能使用基於ajax的按鈕/鏈接。

此處用於確認a4j限制的鏈接: https ://community.jboss.org/thread/8598 使用JSF下載CSV文件

我還考慮過嘗試在單擊按鈕后添加彈出面板,而不使用像這樣的ajax: http ://showcase.richfaces.org/richfaces/component-sample.jsf?demo=popup&skin= blueSky

但是再次重申,它有時無法繼續下載(通常是在將XML打印在我的日志中之后)。

歡迎任何想法,目前任何解決方案都可以,甚至可以重定向到新頁面。

紐扣

<h:commandButton action="#{managingBean.download()}" value="#{bundle.download}"/>

管理Bean

DownloadUtils.download(object.getOrderReference() + ".pdf",
                    service.getReport(ReportFormat.PDF, object.getOrder()));

服務

public InputStream getReport(ReportFormat format, Object object) throws IOException {
    InputStream is = getReportResource("String", format);

    Report report = someService.createReport(object);
    Document doc = toXml(report, Report.class);

    Map<String, Object> params = new HashMap<String, Object>();
    params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, doc);
    params.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, "yyyy-MM-dd'T'HH:mm:ss");

    return getReportFromJasper(is, params, format, true, true, false);
}

先感謝您。

有兩種方法可以做到這一點。

使用jQuery:

------------------

<script type="text/javascript">
/* <![CDATA[ */

$("a[id$='submitButtonID']").click(function() {
    $(this).replaceWith( "In Progress");
});
/* ]]> */ 
</script>

<h:commandLink  id="submitButtonID" value="#{bundle.download}" action="#{managingBean.download}"></h:commandLink>

使用Java腳本:

-------------------

function displayWaitMsg()
{
         var btnId=getElementForAnId("submitButtonID");
         document.getElementById(btnId).style.display="none";
         var wt=getElementForAnId("waitMsg");
         document.getElementById(wt).innerHTML ="Please wait. Your request is being processed.";
         document.getElementById(wt).style.display="block";
}

function getElementForAnId(str) // To removing appending content
{
        var ret;
        var inputs = document.getElementsByTagName('*');
        for ( var i = 0; i < inputs.length; i++) {
                if (inputs[i].id.indexOf(str) != -1) {

                        ret = inputs[i].id;
                }
        }
        return ret;
}

<h:commandLink id="submitButtonID" action="#{managingBean.download}" onclick="displayWaitMsg();" value="#{bundle.download}">

<div id="waitMsg" align="center" style="display: none;"></div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM