【问题标题】:What to use instead of <c:forEach in .blur function在 .blur 函数中使用什么代替 <c:forEach
【发布时间】:2013-10-04 08:48:52
【问题描述】:

当我尝试在 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,其中包含但我没有解析从输入字段接收到的值。

所以我改变了这个

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

到这里

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

现在似乎工作得很好。

正如我之前提到的......如果有更好的方法来完成我想要做的事情,我将不胜感激......

【问题讨论】:

    标签: jsp hashmap jstl matching


    【解决方案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]。这样,您可以在服务器端和客户端对结构进行类似的处理,从而提高可维护性。

    【讨论】:

    • 这很有意义。我想我一直在服务器端和客户端之间感到困惑......以及我应该在哪里处理......非常感谢
    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2019-05-07
    • 2017-04-29
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多