2012-04-20 44 views
0

我有一個Java servlet,它成功地將一堆會話變量,說:使用Javascript - 傳遞變量以session.getAttribute

SessionVar1 SessionVar2 SessionVar3現在

,在Java腳本,我可以讀

var name = '<%= session.getAttribute("SessionVar1") %>';  
var name = '<%= session.getAttribute("SessionVar2") %>';  
var name = '<%= session.getAttribute("SessionVar3") %>';  

然後我打電話文件撰寫打印1,名稱和名稱3:使用類似於下面的代碼打印會話變量。

再一次,這工作沒有問題。但是,我沒有3個會話變量,而是100個。 我不想寫100個對session.getAttribute的調用,所以我想使用「FOR」循環 並將循環計數器追加到會話變量的名稱中檢索。一些沿線:

int i=100; 
for (i=1; i<=100; i++) 
{ 
    var VariableName = "SessionVar" + i; 
    var name = '<%= session.getAttribute(VariableName) %>';  
    document.write(name); 
} 

我嘗試了很多組合,我無法傳遞參數到session.getAttribute。我明白Javascript參數不存在於服務器的上下文中,但我想知道是否有任何方法可以避免必須調用session.getAttribute 100次。

預先感謝您。

問候,

蓋伊

回答

1

當然不是 - scriptlet中(boooo)客戶有機會運行任何JavaScript之前運行。

的典型的解決方案是產生JS在Java中(最好使用標籤),非常大致爲:

​​

需要提醒的是(一)EW,和(b),你應​​該JavaScript的逃生該屬性是安全的。

這仍然調用getAttribute 100次 - 你需要100個會話變量(已經開始是代碼味道),你可以稱它爲100次。你的其他選擇是把這一切都放到一個數組中,因爲nameNNN有點奇怪 - 集合存在的原因。

+0

+1:我在2001年看到了像這樣的生產代碼......不知道人們仍然這樣認爲 – 2012-04-20 02:51:02