js变量如何传递给js引用java变量?

20:29 提问
js向java传递参数,有百分号
想后台传递一个对象用JSON.stringify()转换成json对象,如果对象含有%,java后台获得的是null,怎么办?
按赞数排序
编码吧,比如用base64编码,对方解码
前后台传递特殊字符可以用URLEncoder和URLDecoder配合编码解码,注意编码解码指定同样的字符编码,如UTF-8
你是键值对传还是直接传递json这个字符串?
键值对需要用encodeURIComponent编码下JSON.stringify后的内容。直接发送json格式的字符串要从2进制流读取数据,不是键值对了
分两种情况键值对和json串;
前者采用encodeURIComponent;
后者是2进制流读取数据;
希望对你有用!!!!
其他相似问题温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(340)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'项目中用到的js传日期参数到java后端,java后端传参到js前端',
blogAbstract:'第一种方法:前端根据选定的日期获得一个字符串日期,将该字符串日期解析为Date,直接传参到java后端即可代码如下:var dt = new Date(conf.nBakTime);//前端解析为Date,后端直接用Date。第二种方法:前端直接传字符串参数,java后端解析。在entity中setN_bak_time中进行解析。代码如下://&&& public void setN_bak_time(String n_bak_time) throws ParseException {//&&& &&& &&& SimpleDateFormat format = new SimpleDateFormat(\"yyyy/MM/dd HH:mm:ss\");',
blogTag:'',
blogUrl:'blog/static/3',
isPublished:1,
istop:false,
modifyTime:8,
publishTime:6,
permalink:'blog/static/3',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}javaScript与java跨界传递map
- 清凉世界 - ITeye博客
博客分类:
JDK6内置了javaScript引擎,用以解决js和java之间的跨界调用。
对于希望开放更加灵活的定制给最终用户的java应用,这是姗姗来迟的福音。
通过在java应用中开放脚本定制给最终用户,可以实现更大程度的灵活性,例如:编写业务规则,甚至是扩充业务函数库。
在我最近编写的一个应用中,采用了上述方式,即:将后台的java编写的功能以javaScript形式发布,
并提供基础javaScript函数库给用户,允许其进行二次开发。
但在具体实施时,还是遇到些许麻烦。书写于此,供后来者借鉴。
我在后台java提供了一个对象,该对象接受HashMap参数传入并执行相应操作,形式如下:
class IDC_Snmp
void set(HashMap nvs){
按照jdk说明文档,
/developer/technicalArticles/J2SE/Desktop/scripting/
编写java语句如下:
idc = new IDC_Snmp();
engine.put("idc",idc);
然后编写js语句如下
idc.set({p1:"v1",p2:"v2"});
原本以为engine可以识别js的map类型,并自动匹配java的HashMap形参并调用相应方法,
结果跟踪调试,发现js的map类型到java方法中不能自动匹配为HashMap,而是成为NativeObject。
所以没有获得预期结果。
解决办法之一是:java中增加转换处理,自己编码将NativeObject转换为HashMap。
参考了这篇博文:
http://relive123-yahoo-com-/blog/784700
public static Map&String, Object& obj2map(ScriptEngine engine,
Object nativeObject) throws ScriptException, NoSuchMethodException {
Map&String, Object& map = new HashMap&String, Object&();
engine.put("map", map);
engine.put("obj", nativeObject);
String script = "
function dosomething(){
for (i in obj){
map.put(i,obj[i]);
engine.eval(script);
Invocable inv = (Invocable)
inv.invokeFunction("dosomething");
但是总觉得这种方式过于曲折,并不是jdk原生的实现。
因此用了第二种解决办法:就是在javaScript中将map先转为engine可以识别的数组形式,后台的java方法也是以数组形式出现。
相关的代码为:
class IDC_Snmp
void set(String[] pns,Object[]pvs){
其中pns,pvs分别对应HashMap中多个的Name和Value。
javaScript部分
function set(pvMap){
var pns = [];
var pvs = [];
for(x in pvMap){
pns[pns.length]=x;
pvs[pvs.length]=pvMap[x];
idc.set(pns,pvs);
这个感觉好些,出问题就该打JDK的板子了!
浏览: 171368 次
来自: 北京
哈哈,学习了~~
用上了,很赞!节省了不少时间。多谢分享!
哈哈~~~
林黛玉的别名叫颦儿
有意思的红学解构。javascript传递参数如果是object的话,是按值传递还是按引用传递? - 知乎196被浏览17943分享邀请回答var obj1 = {
value:'111'
var obj2 = {
value:'222'
function changeStuff(obj){
obj.value = '333';
obj = obj2;
return obj.value;
var foo = changeStuff(obj1);
console.log(foo);// '222' 参数obj指向了新的对象obj2
console.log(obj1.value);//'333'
code里的注释太小看不清,我移到这里来:/* obj1仍然指向原来的对象,之所以value改变了,
*是因为changeStuff里的第一条语句,这个时候obj是指向obj1的 .
*再啰嗦一句,如果是按引用传递的话,这个时候obj1.value应该是等于'222'的
*/好了,以上就是关于这个问题的全部解释了。各位有兴趣的话可以去了解一下call by value ,call by reference call by sharing 等函数传递的机制还有stackoverflow上对于函数传递的这个问题解释得相当精辟,值得一看。(下面有链接)参考:我的红宝书《javascript高级程序设计》P69-P71有哪里不明白或者觉得我表述不清楚、不正确的地方,欢迎提出一起讨论~ (编辑于)------------ 更新 ----------发现这位同学解释得也很清晰,大家可以看看13771 条评论分享收藏感谢收起7添加评论分享收藏感谢收起查看更多回答1 个回答被折叠()&&&&&&&&&&&&&&&&&&
posts - 14,comments - 0,trackbacks - 0
1。js变量获取jsp页面中java代码的变量值。&方法:var JS变量名 = &%=JAVA变量名 %&&&2。java代码获取js变量的值。&说明:在JSP中;Java部分是在服务器端执行的;js部分是在客户端的浏览器执行的;二者完全不相干。因此直接在JSP页面上是无法在js、java和HTML变量之间进行调用的。&变通(解决方案):将js变量放到form中的一个;在后台从form中取出变量放到隐藏域中;然后提交表单给要调用变量的页面。这个页面可以就是本身。示例如下:&bb.jsp页面:&&&&&&% 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);&&%&&&注:如果同一个页面自己给自己传值,aa.jsp和bb.jsp可以为同一页面。
传递的java变量一般应该是表示数字或者字符串的变量,复制给js变量一定要用引号括起来,如果java变量值含有引号,不好意思了你还得做转义。
阅读(...) 评论()

我要回帖

更多关于 jsp中java调用js变量 的文章

 

随机推荐