一个jsp页面中,写了一段js代码,想直接调用另一个Java类中的一个方法,有代码如下:
<%@ page contentType="text/html;charset=GBK" pageEncoding="GBK" language="java"%>
<%@page import="com.lowagie.text.Document"%>
<%@ taglib uri="/zhongwaytag" prefix="zw"%>
<%@ page import="com.zhongway.db.CallProcLocalizationSch_Ora"%>
……
……
<script type="text/javascript">
    function location(nodeName){
     if(nodeName.value == null || nodeName.value.trim()==""){
     alert("请输入有效站点名称!");
     }
     var locId =<%= CallProcLocalizationSch_Ora.locationNode(nodeName, request) %>
    }
</script>
问题1:这样是否可以调用得到CallProcLocalizationSch_Ora类中的locationNode()方法;
问题2:这段代码中,var locId =<%= CallProcLocalizationSch_Ora.locationNode(nodeName, request) %>的nodeName参数报“nodeName cannot be resolved”错误。请教高人帮忙看看,怎么回事??

解决方案 »

  1.   

    js和jsp在同一个界面相应的是一个http请求,jsp优先执行。dwr使用的异步不同的http请求调用。不一样的。
      

  2.   

    问题1: 
    js是不可以访问服务器端程序的,所以谈不上js调用locationNode()方法;jsp页面中的java代码块是在服务器端执行的,所以这么写locationNode()方法可以执行,执行后把返回值赋给js变量locId 问题2:
    nodeName这个是js声明的变量,你把他做参数放到java代码块里不报错才怪;
    最根本的原因还是js不能访问后台程序;如果你想访问后台程序用ajax
      

  3.   

    问题1:这样是否可以调用得到CallProcLocalizationSch_Ora类中的locationNode()方法;
    可以调用,记住客户端得js是无法阻止服务器端得代码执行的。
    var locId = "<%= CallProcLocalizationSch_Ora.locationNode(nodeName, request) %> ";
    问题2:这段代码中,var locId = <%= CallProcLocalizationSch_Ora.locationNode(nodeName, request) %>的nodeName参数报“nodeName cannot be resolved”错误。这个错误也可以说明是可以调用的否则不是报这种错误,你的参数要有""号. 
    试试吧
      

  4.   

    1,不可以。
    2.可以使用一楼推荐的DWR来实现。
    楼主要分清楚B/S开发中的,B和S,有的代码是在server上执行的,有的代码是在browser上执行的。
    不能混在一起的。
      

  5.   


    var locId =<%= CallProcLocalizationSch_Ora.locationNode('nodeName', request) %>;
    应该这样使用吗?、
      

  6.   

    skyzxl 您别误导人家  你仔细看代码了吗 
    nodeName是js变量  不能放到java代码块里  而且js调用java的方法这说法本身就错误
      

  7.   

    这样试试,我没你那环境,没测过 就是用ajax主页面:
    <%@ page contentType="text/html;charset=GBK" pageEncoding="GBK" language="java"%> 
    <%@page import="com.lowagie.text.Document"%> 
    <%@ taglib uri="/zhongwaytag" prefix="zw"%> 
    <%@ page import="com.zhongway.db.CallProcLocalizationSch_Ora"%> 
    …… 
    …… 
    <script type="text/javascript"> 
        function getRequestPageValue(requestpage,urlParam,getMode) {
    var URLParam = urlParam;
    var xmlObj = new ActiveXObject("Microsoft.XMLHTTP");  
    xmlObj.open(getMode,requestpage + URLParam,false); 
    xmlObj.setrequestheader("content-length",URLParam.length); 
    xmlObj.setrequestheader("content-type","application/x-www-form-urlencoded");

    xmlObj.send(URLParam);
            var res = xmlObj.responseText;
    var returnStr = Trim(res.toString()); 
    return returnStr;
    };
        function location(nodeName){ 
            if(nodeName.value == null || nodeName.value.trim()==""){ 
             alert("请输入有效站点名称!"); 
            }else{
             var requestpage = "b.jsp" ;
        var URLParam = "?nodeName=" + nodeName ;
        var locId = getRequestPageValue(requestpage,URLParam,'POST') ;
            } 
        } 
    </script> 
    调用页面
    b.jsp
    <%
    String nodeName = request.getParameter("nodeName") ;
    com.zhongway.db.CallProcLocalizationSch_Ora.locationNode(nodeName, request) ;
    out.print(nodeName) ;
    %>
      

  8.   


    //用jqueryvar _locId = locId;
    $(document).ready(function(){
        $.post("path",{"param":"nodeName"},function(data){
    _locId = data; }
           });
        });
      

  9.   

    dwr
    jsName.path(参数值,function(data){
        ...........处理返回值
    });
    dwr是js和java娄交互的非常好的框架,非常好用.
      

  10.   

    问题已经解决,重新建了一个JS,内容如下:
    function locate(action, nodename) { var url = action; var pars = "nodename=" + nodename;
    var myAjax = new Ajax.Request(url, {method:"post", parameters:pars, onComplete:showResponse});
    }
    function showResponse(originalRequest) { var myobj = originalRequest.responseText.evalJSON(true); if(myobj.length == 0){
    alert("没有找到匹配结果!!");
    }else{
    var ttt = myobj[0];
    var select = eval(ttt.nodeid);
    }

    return select;
    }