<pre t="code" l="java"><% String test5 = (String)request.getAttribute("test4")%>
<script type="text/javascript">
var test1 = '111'//定义js变量
document.form.test2.value = test1
//将js变量的值放到form中的一个隐藏域中
var formObj = document.getElementById('passForm')
formObj.submit()
</script>
<form method="post" action="aa.jsp" id ="passForm">
<input id = 'test2' type = 'hidden' name="test2">
</form>
aa.jsp页面中的Java代码:
<%
request.setCharacterEncoding("utf-8")
String txtMsg = request.getParameter("test2")
out.println(txtMsg)
%>
在Java中调用js文件中的function,传入调用参数,并获取返回值js文件中的merge函数将两个参数a,b相加,并返回c。
// expression.js
function merge(a, b) {
c = a * b
return c
}
在Java代码中读取js文件,并参数两个参数,然后回去返回值。
package com.sinaapp.manjushri
import java.io.FileReader
import javax.script.Invocable
import javax.script.ScriptEngine
import javax.script.ScriptEngineManager
/** * Java调用并执行js文件,传递参数,并活动返回值 * * @author manjushri */
public class ScriptEngineTest {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager()
ScriptEngine engine = manager.getEngineByName("javascript")
String jsFileName = "expression.js" // 读取js文件
FileReader reader = new FileReader(jsFileName) // 执行指定脚本
engine.eval(reader)
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine // 调用merge方法,并传入两个参数
// c = merge(2, 3)
Double c = (Double)invoke.invokeFunction("merge", 2, 3)
System.out.println("c = " + c)
}
reader.close()
}
}
输出结果:
c = 5.0
javascript是前台的脚本语言、java不能直接读取、你可以将js的数组以一个特殊符号分割组成一个字符串传到后台在用java的split方法转换成数组!比如:
js code: var arr = {'a','b','c'}=>var ss = “a&b&c”
java code:String ss = "a&b&c"String[] arr = ss.split('&')