用什么而不是

时间:2013-10-04 08:48:52

标签: jsp hashmap jstl matching

在尝试循环JSP中的HaspMap时,我已经阅读了很多问题和答案 大多数人都指向使用jstl taglib来使用以下内容:

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

然而这在以下地方不起作用(参见 - ...... ??? ...):我想要做的是当输入文本字段失去焦点时我想匹配该字段内的任何内容我以前从我的控制器提供的Hashmap。

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

所以我有两个问题:

1: 我可以使用什么来循环JSP函数中的HashMap?

2: 我可以阅读哪些内容,以了解我在jsp区域内可以使用的功能,请记住我要避免使用scriptlet。

非常感谢

肖恩

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 个答案:

答案 0 :(得分:1)

Java HashMap对象仅由服务器上的JVM定义和理解。您需要将组成它的数据放入可以由用户浏览器中的Javascript使用的结构中。您可能的解决方案将起作用,但是您必须在服务器端工作以将每个密钥放入List对象并将其序列化为JSON字符串。而是尝试序列化控制器中的Map对象。听起来你的键是整数,所以:

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]。这样,您可以在服务器端和客户端上类似地处理结构,从而提高可维护性。