2011-10-19 31 views
0

我有我的web應用的結構是這樣的:如何檢查用戶是否第一次點擊JSP中的鏈接?

有n鏈接主頁和標籤結構

每一個鏈接打開主頁的標籤結構和AJAX標籤加載頁面的標籤

因爲每個頁面都需要不同的javascript函數(主要用於init部分),所以在ajax加載的完整函數中,我加載了.js腳本並執行它。

現在我有一個問題:我需要在其中一個選項卡中有一個文本編輯器,所以我選擇了TinyMCE。它需要被初始化,但只有一次,否則會崩潰。 現在我需要一種方法來檢查用戶打開標籤的次數。

我正在尋找jsps中的變量範圍,並找到了「Session Scope」。我知道服務器端會話變量不能從客戶端訪問,但jsp中的這些會話範圍變量是客戶端,所以我想我會使用會話變量jsp端來計算用戶點擊鏈接的次數。

在主JSP我把:

<c:set var="timesEditorLoaded" value="0" scope="session" /> 

這將打開編輯器中的鏈接是:

<a tabindex="22" id="proposte_propostaTesto_a" class="colorbox" href="${pageContext.request.contextPath}/editorPopup?hiddenCallerFormElementId=proposte_propostaTesto&" onClick="incrementEditorVariable();">Apri editor</a> 

功能incrementEditorVariable()是:

<script type="text/javascript"> 
function incrementEditorVariable() 
{ 
    alert("incrementEditorVariable: " + timesEditorLoaded); 
    timesEditorLoaded = timesEditorLoaded + 1; 
} 
</script> 

,但在Chrome我得到:

Uncaught ReferenceError: incrementEditorVariable is not defined 

如果我把函數incrementEditorVariable放在一個外部的.js文件中,我該如何訪問存儲在jsp中的會話變量? 有沒有辦法做到這一點? 提前謝謝!

+1

解決方案應該是純javascript。不要被服務器端變量弄糊塗。 –

+0

正如我在帖子中寫的,我正在談論客戶端變量。我的意思是 - > http://www.java-samples.com/showtutorial.php?tutorialid=1009 – Andrea

+0

@Andrea不,你不是隻談論客戶端變量 - 會話變量是服務器端的變量,和使用JSP標籤創建的變量一樣。 timesEditorLoaded是一個服務器端變量。 –

回答

0

我最終在MVC架構中添加了一個會話變量,並完成了這項任務。我這樣做是爲了嘗試修復一個bug,我完成了對用戶點擊鏈接的次數的計算,以防止初始化一個TinyMCE實例,但這並沒有解決菜單保持打開狀態的問題。

0

您可以在用戶單擊按鈕時修改onclick事件。看起來有點蹩腳,但如果onclick只有一件事要關心,可以解決所有問題。

+0

我不明白..在我發佈的onclick中,我調用了javascript函數incrementEditorVariable()。我也試過onClick =「$ {timesEditorLoaded} = incrementEditorVariable();」但沒有運氣..你能解釋你的評論更詳細的修改內容嗎? – Andrea

+0

我的意思是這樣的:btnOnlyOnce.onclick = function(){doIt(); btnOnlyOnce.onclick =「」;}這是一種防止與控件進行多次交互的方法。我曾經爲一些JS遊戲和腳本這樣做,它只需要做一次事情。 –

相關問題