org.apache.jasper.JasperException:无法为JSP编译类:

时间:2014-09-14 06:45:00

标签: javascript jsp

我试图在javascript中调用jsp代码。

错误如下

org.apache.jasper.JasperException:无法为JSP编译类:

     An error occurred at line: 16 in the jsp file: /testng_index.jsp
     String cannot be resolved
     13:            var mai=document.getElementById("j");
     14:            //mai.value = mai.value.toUpperCase();
     15:            var m=mai.value;
     16:            <%=String value=document.writeln(m)%>
     17:            var mo= <%=  new  PlaneBo().getOwnerId(value)%>;
     18: //             document.writeln(mo);
     19:            if(mo==0)

这是代码

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="com.ams.services.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"       
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript" language="javascript">
    function emailCheck()
    { 
        var mai=document.getElementById("j");
        //mai.value = mai.value.toUpperCase();
        var m=mai.value;
        <%=String value=document.writeln(m)%>
        var mo= <%=  new  PlaneBo().getOwnerId(value)%>;
//          document.writeln(mo);
        if(mo==0)
            {
//                  document.writeln(m);
                 var tab = document.getElementById("t");
                var row = tab.insertRow(3);
                var cell1=row.insertCell(0);
                var cell2=row.insertCell(1);
                var inpt= document.createElement("input");        
                inpt.setAttribute("name","jho");
                inpt.setAttribute("type","text");

                cell1.innerHTML="Name";

请为我提供这个问题的合适解决方案。

1 个答案:

答案 0 :(得分:0)

在我看来,您似乎对Java和JavaScript代码执行的时间和地点感到困惑。

当浏览器请求页面时,Java代码和JSP在服务器上运行。服务器对HTML和JavaScript一无所知。就服务器而言,这是您的JSP页面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="com.ams.services.*" %>
TEXT 
        <%=String value=document.writeln(m)%>
TEXT <%=  new  PlaneBo().getOwnerId(value)%>
TEXT 

服务器并不关心标记为TEXT的部分中的内容;它只是将它们直接发送到浏览器。但它确实关心<%@ ... %><%= ... %>标签中的内容。

您收到错误,因为服务器无法理解document.writeln(m)。它不知道任何名为document的对象,因此无法评估document.writeln(m)。碰巧在JavaScript中有一个对象document和一个函数document.writeln,但这是无关紧要的。服务器对JavaScript一无所知。

在页面完成发送到浏览器之前,JavaScript代码才会执行​​。调用函数时未显示:可能是在输入字段的值已更改或单击按钮之后。 JavaScript在浏览器中运行,而不是在服务器上运行,因此它无法直接调用服务器上的Java代码。

如果您真的想在调用JavaScript函数期间在服务器上执行某些Java代码,则需要使用AJAX调用。有关如何执行此操作的详细信息,请参阅this question