
第一步骤:问题总结:
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返回的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)