2013-10-04 18 views
0

通過HaspMap在JSP
試圖循環 點大多使用JSTL標籤庫利用下面的時候我看過很多很多的問題和答案:,而不是用什麼<C的:在的forEach功能.blur

<c:forEach items="${myHashMap}" var="units"> 
    ... 
</c:forEach> 

但是,這不會在下面的地方工作(見 - ... ??? ...):我想要做的是當輸入文本字段失去焦點我想匹配裏面的任何東西字段反對我以前從我的控制器提供的Hashmap。

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#someInput").blur(function(){ 
      ... ??? ... 
     }); 
    }); 
</script> 

所以我有2個問題:

1:可以通過我一個HashMap用什麼來回路中的JSP的功能裏面?

2:我能讀,看看哪些功能是提供給我的JSP區域牢記我想避免小腳本里面。

非常感謝

肖恩

BAH ...:- 可能解決方案 -

於是我找到了解決這個已經(我認爲)...

var csm = ${cs}; 
var keysArray = new Array(); 
for (var key in csm) { 
    keysArray.push(key); 
} 

然後,我只是遍歷while循環數組如下:

var i = 0; 
while (i < keysArray.length) { 
    if ((var1_toCheck === keysArray[i]) && (var2_toCheck === csm[keysArray[i]])) { 
     alert("**WARNING**\n\nYou have found a match!"); 
     break; 
    } 
    i++; 
} 

比賽仍然沒有工作,但我仍然對工作......

任何建議,以提高我的解決方案將是讚賞。

乾杯 肖恩

而且......我固定的匹配也

控制器發送包括一個HashMap但我不解析我從inputfield接收的值。

,所以我改變了這種

var val1_toCheck = $("#val1").val(); 

這個

var val1_toCheck = parseInt($("#val1").val()); 

似乎是現在的工作太棒了。

正如我前面提到的......如果有更好的方法來完成我試圖做我會很感激的指針...

回答

1

一個Java HashMap對象只能通過在一個JVM定義和理解服務器。您需要將數據組成數據,並將其放入用戶瀏覽器中Javascript可以使用的結構中。你的可能的解決方案將起作用,但是你必須在服務器端進行工作,將每個密鑰放入一個List對象中,並將其序列化爲一個JSON字符串。相反,嘗試序列化您的控制器中的地圖對象。這聽起來像你的鑰匙是整數,那麼:

Map<Integer, String> csm = new HashMap<Integer, String>(); 
csm.put(1, "valueone"); 
csm.put(2, "valuetwo"); 
csm.put(3, "valuethree"); 
String json = new Gson().toJson(csm, Map.class); 
request.setAttribute("cs", json); 

現在你有少得多的編碼在JSP做的,你利用的Javascript的OO性質通過處理一個對象,你不再需要循環鍵。

var csm = ${cs}; 
var1_toCheck = '1'; // string values - no need for parseInt() 
var2_toCheck = '2'; 

// check to see if key is a property of the csm object using typeof csm[var1_toCheck] != 'undefined' 
// check equality of var1 and var2 values (not sure I understand your intent with this logic) 
if (typeof csm[var1_toCheck] != 'undefined' && var1_toCheck == var2_toCheck) 
    alert('Found a match'); 
else 
    alert('No match'); 

因此,您使用typeof csm[varToCheck] != 'undefined'測試密鑰的存在。如果您需要訪問地圖中的值,請使用csm[keyVar]。通過這種方式,您可以在服務器端和客戶端對結構進行相似處理,從而提高可維護性。

+0

這非常有道理。我想我一直在服務器端和客戶端之間感到困惑......以及我應該在哪裏處理... 很多謝謝 – AcidHawk

相關問題