[英]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.