java el表达式问题

java el表达式问题,第1张

第一步骤:问题总结:

el表达式默认获取的是java实体对象和map,list等集合中的数据,

如map 通过键名获取value  ${key}

list 则通过循环类似for一样展示

<c:forEach items="${dataListMap}" var="item">

<li>

<div>${itemid}</div> 

<div>${itemcontent}</div> 

</li>

${itemcontent} 现在获取的是一个json字符串 一个办法是通过截取获得(实现问题过多,不灵活不推荐),一个是在后台利用json *** 作将其转为map或者对应的实体类(参考第一点)。

第一种:json格式数据的传递(一般使用ajax)。

如果你想要

1、 *** 作json数据格式第一种可以参考:

网页链接

import comalibabafastjsonJSON;

public static void main(String[] args) {

   //创建一个对象并将 给对象赋值

   Student st = new Student();

   stsetId(1);

   stsetName("张三");

   stsetSex("男");

   //使用fastjson转化为json字符串

  String studentJson = JSONtoJSONString(st);

  Systemoutprintln(studentJson);

   //将json字符串转为实体对象

  Student changeStudent = JSONparseObject(studentJson,Studentclass);

  Systemoutprintln(changeStudentgetName())

}

2、 *** 作json数据格式第二种可以参考:

网页链接

import javautilList;

42 关键代码:

public static void testList(){    

//将集合对象转为json对象,json字符串    

List<Student> list= new ArrayList<Student>();    

Student st = new Student();    

stsetId(1);    

stsetName("张三");    

stsetSex("男");    

Student st2 = new Student();    

st2setId(2);    

st2setName("小丽");    

st2setSex("女");    

listadd(st);   

listadd(st2);    

//将类转为json对象    

JSONArray array=JSONArrayfromObject(list);    

Systemoutprintln(arraytoString());    

//将json对象转为对应的集合类    

JSONArray arrayBean = JSONArrayfromObject(arraytoString());    

List<Student> listBean = (List<Student>) JSONArraytoCollection(arrayBean,Studentclass);    

//输出转换后的结果    

for (Student lst: listBean) {        

Systemoutprintln("name:"+lstgetName());    

}

}

3、使用ajax调用接收后台数据:

31 使用jquery的ajax 和servlet网页链接

32 使用原生js实现异步调用获取servlet数据:网页链接

第二种:将json对象转为实体类(转换方式参考第一种),并将实体类放入request或者session作用域中。

前端jsp页面引入cjstl表达式:

<%@ taglib uri=">

将数据放入request作用域中:

怎样在html页面中取得session中的值

方法如下:

1首先呢session的key-value都是存在server的,浏览器HTML页面是没有办法直接取得session中的值,只有在html里能通过js拿到jesessionid之类的东西。

11、数据量如果小,可以考虑放到cookie里,传到客户端,html里用js就可以拿到。

12、如果数据量大,可以考虑单独做一个jsp或servlet,根据传来的session的key,返回序列化的session的值,比如json之类的。html里用js通过ajax获取。这种方式复杂了点,多一次远程访问,但是灵活方便。

如:<input type="text" value='<%#Session["username"]%>'>

2或者得通过后台才能获取,session是存在服务器端的,如果你用cookie的话,可以通过js获取。

比如:写个webservice ajax获取你要的session值 或者 利用利用模板语言输出。

3用responsesendRedirect("ahtmlparam=hello");用下面的JS方法

如:var v=getUrlParameter('param');

function getUrlParameter( name ){

name = namereplace(/[\[]/,"\\\[")replace(/[\]]/,"\\\]");

var regexS = "[\\&]"+name+"=([^])";

var regex = new RegExp( regexS );

var results = regexexec(windowparentlocationhref );

if( results == null ) return ""; else {

return results[1];

}

}

以上几种方法在html页面中取得session中的值

个人建议直接使用jQuery的$each()遍历数组。

还有就是你这种设计想法不太好。干嘛不再设置一个post页面,直接jsp执行完所有 *** 作,将结果交由javascript处理呢?

一般来说,动态脚本变量赋值给js变量很简单,反过来不太容易实现。

JSON报错问题的解决

今天在项目中,有一个angularJS的页面,使用$>

之后修改代码,在$>

$>

url:link,

data:param,

transformResponse:function(rst){

windowrcdt=rst;

}

})success(function(res){

//

});

对代码做了以上修改后,在chrome的控制台里面通过

输入windowrcdt打印出返回的字符串,看不出问题来,

然后通过,JSONparse(windowrcdt),报错Unexpected token in JSON at position 650。

之后,再在控制台输入windowrcdt=windowrcdtreplace(/\s+/,""),将字符串中的空格去除。

这时候再输入JSONparse(windowrcdt);JSON转换正常,没有报错。

到这里,算是定位到问题,是JSON中包含了特殊字符。

之后又找到请求url对应的后台,发现后台返回的是一个jsp页面,并且当初是我为了省事在jsp页面中使用EL表达式拼接的JSON字符串。

[

<c:foreach items="${myList}" var="me" varStatus="st">

{"name":"${mename}","age":"${meage}","content":"${mecontent}"}<c:if test="!stlast">,</c:if>

</c:foreach>

]

在JSP页面中是这样写的,通过el表达式和JSTL标签生成的JSON字符串。这种写法本没有错误,能够正确返回JSON字符串的。

但是,问题就出在${meconent}上,它的值是通过前台输入保存的

前台这样输入后,获取的textarea中的value值里面,包换了换行符“\n”。这个换行符在前台展示是可以的,浏览器不认它是换行,但是保存数据库,并且后台没有对换行符进行处理。所以最后获取到的JSON字符串中也就包含了换行符。而JSONparse报错的原因就是因为换行符。

所以,要对conent中的换行符进行替换。

<% requestsetAttribute("vv","\n");%>

[

<c:foreach items="${myList}" var="me" varStatus="st">

{"name":"${mename}","age":"${meage}","content":"${fn:replace(mecontent,vv,'')}"}<c:if test="!stlast">,</c:if>

</c:foreach>

]

使用jstl的fn函数对content中的换行符进行替换。因为replace函数中直接填"\n"会报错,所以使用requestsetAttribute将“\n”设置为变量再使用,这样就能正常替换了。

到这里,问题解决了,前台也能正常转换成JSON了,不再报错了。这个问题说起来简单,但找问题的时候,花了两个小时。所以记录下来,也便于遇到同样问题的人能够快速解决问题。

另外,如果JSONparse报错为:Unexpected token o in JSON at position 1,那就很有可能不是JSON字符串的问题,而是你调用了两次JSONparse导致的。

或者对已经是JSON对象的对象调用JSONparse也会报这个错误。

以上就是关于java el表达式问题全部的内容,包括:java el表达式问题、怎样在html页面中取得session中的值、jstl如何获取js返回的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9483112.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存