使用javascript将javascript变量与JSP数组进行比较

时间:2014-01-18 06:37:13

标签: javascript jsp

这是我的代码

<script>
function validation () {
    var x=document.getElementById("user").value;
    var y=document.getElementById("user");
    var names="<%=names%>";
    for (var j=0; j<names.length; j++) {
        if (names[j].test(x)) {
            //alert(names[j].match(x));
            return true;
        }
        else{
            y.focus();
            return false;
        }
    }
}
</script>

这是一个登录页面,有2个字段与通常的用户名密码一样。 我正在检查数据库中是否有用户名,他可以输入密码,否则他不能。但即使用户名是对的,这段代码也不会输入密码。 我做错了什么?

3 个答案:

答案 0 :(得分:0)

假设java中names的数据类型为String[],则代码<%=names%>等于<%=names.toString()%>。 因此,当呈现jsp时,您的javascript代码将类似于var names="[Ljava.lang.String;@5d888759"。显然,它不是一个有效的javascript数组定义。

首先需要处理java数组。将以下代码添加到您的jsp(在您的javascript代码上方):

<%
StringBuilder sb = new StringBuilder();
sb.append("[");
for(String name : names) {
    sb.append("'");
    sb.append(name);
    sb.append("',");
}
if(sb.charAt(sb.length() - 1) == ',') {
    sb.setLength(sb.length() - 1);  //remove tailing ','
}
sb.append("]");
String strNames = sb.toString();
%>

然后将您的js代码修改为:

var names="<%=strNames%>";

jsp渲染后,你的js代码将是:

var names="['foo','bar']";

是js中的有效数组定义。然后它会工作。

如果java中names的数据类型为List<String>,则解决方案类似。

答案 1 :(得分:0)

我找到了答案.Thnx的帮助

这是答案

function validation() {
    var x=document.getElementById("user").value;
    var y=document.getElementById("user");
    var z=document.getElementById("pass");
    var names="<%=names%>";
    names= names.replace("[", "").replace("]", "");
    names=names.split(", ");
    for (var j=0; j<names.length; j++) {
        if (names[j].localeCompare(x)==0) {
            return true;
        }
        z.removeAttribute("readonly", 0);
    }
    alert("You username is not registered on our databsae");    
    y.focus();
}

答案 2 :(得分:0)

检查出来

案例1

         var names='{id:1,key:"Apple"}'; // here names is string
         names.key // will give you error

         // so you need to parse it
         //using the json2.js script:
         var obj = JSON.parse(names);
         obj.key // will give you Apple

         var obj = jQuery.parseJSON(names)// in jquery

较新的浏览器本身支持JSON对象。 Crockford的JSON库的当前版本将仅定义JSON.stringify和JSON.parse(如果它们尚未定义),则保留任何浏览器本机实现。

案例2

         var names={id:1,key:"Apple"}; // here names is object
         names.key // will give you Apple

参考

JSON =&gt; https://github.com/douglascrockford/JSON-js