1. ognl和el表达式的区别
ognl和el表达式的区别
el 和ognl都是表达是语言,但语法是不一样的,所谓表达式语言,就是输入一串表达式,解释器帮你求值。jstl是一套标签库,说白了是一套可以用在jsp页面的标签。jstl和el都属于jsr的一部分。ognl则是社区一套表达式语言,最初用于webwork。
这段就是带参数的url 相当于 hello action的URL后面加上 ?userName=Bruce+Phillips${helloLink}是EL表达式 <s:url action="hello" var="helloLink">
<s:param name="userName">Bruce Phillips</s:param>
</s:url>
实际上这段的意思是将带参数的url字符串放到request属性中,再通过EL把它取出来${helloLink}可以换成${requestScope.helloLink}
2. Struts2 2.5 用ognl表达式从action里面取值,显示在jsp页面,为什么不能根据性别取出对象呢看下图
struts2中使用的OGNL表达式在拿action中的值的时候无论如何都取不到。
UserAction.java 这个类查出了一个“lists”,也就是我在jsp页面中要取的值。
[java]view plain
packagetm.change.action;
importjava.util.ArrayList;
importjava.util.List;
importtm.change..UserDao;
importtm.change..impl.UserDaoImpl;
importtm.change.domain.User;
publicclassUserAction{
privateUserDao=newUserDaoImpl();
privateList<User>lists=newArrayList<>();
publicStringlist(){
lists=.findObject(0,2);
return"list";
}
}
list.jsp
在这个页面上,我要取上面这个类中的lists,然后生成一张table。但是无论如何都取不到值。
[html]view plain
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>Inserttitlehere</title>
</head>
<body>
<tableborder="1px">
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>邮箱</th>
</tr>
</thead>
<tbody>
<s:iteratorvar="entity"value="lists">
<tr>
<td><s:propertyvalue="name"/></td>
<td><s:propertyvalue="age"/></td>
<td><s:propertyvalue="email"/></td>
</tr>
</s:iterator>
</tbody>
</table>
</body>
</html>
原因总结:通过浏览了好多博客,找到了原因。
struts2采用的是映射机制,就是说你在action定义的变量通过set和get方法在页面中是可以得到数据的也就是说如果你想要在页面中取得action中的值的话就一定要把它定义出来,并且给他至少一个get方法,你可以吧MessageStore定义到你的action中去然后通过getMessageStore映射到页面上然后再通过struts2的标签提取其中的数据。
因此,我在UserAction.java中给lists 写了一个get和set方法
果然,立刻就拿到了值。
3. jsp里面有个很像EL表达式的#{ },是什么表达式
OGNL表达式
构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
支持容器的构造的表达式:
例如:{"green", "red", "blue"}构造一个List,专#{"key1" : "value1", "key2" : "value2", "key3" : "value3"}构造一个Map
OGNL是Object-Graph Navigation Language的缩属写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
4. jsp中如何生成HTML中的标签啊比如,我想写个for循环,在页面上生成N个<td>...</td>的单元
通过<%%>内写入抄java代码即可实现,袭不过真正开发一般不这样做,要使用EL或OGNL表达式<table> <tr> <%for(int i = 0; i < n; i++){ %> <td> </td> <% } %> </tr>
</table></p></p>
5. struts2 jsp如何获取action值
现在jsp页面头部引入struts2标签库
<%@ taglib prefix="s" uri="/struts-tags"%>
然后再需要的地方使用
<s:property value="OGNL表达式"/>
每次请求action转发回来后,当回前页答面会有一个
valueStack,action里的全部信息都保存在里面,比如你action里有个字段username(提供的有get方法)
则你在<s:property value="username"/>就能直接取到值。
如果是对象ognl还可以支持导航<s:property value="user.username"/>
依次类推。
同时当前页面还保存的有ActionContext(不知道怎么翻译...),跟valueStack一样,也可以直接取值,但是前面要加个#号以区别。
request、application对象都在actionContext里面,
可以这么取requst里的值
<s:property value="#request.username"/>等
6. jsp页面根据数据库里查询的值,显示不同的div。
您好,很高兴为您解答,首先请你提供您所使用的框架技术,包括哪些,如果没有使用框架,我给你提供最简单原始的如下思路:
拿简单的 servlet 来说:
当在页面做 input 提交时,用户名已经被提交到后台,当然,我们的目的是获取work_order值,接下来控制页面转发回你提交的 jsp,记住转发与重定向的区别,这里我不做过多阐述,接下来就是jsp 页面的操作了,您可以使用脚本语言<%...%>,亦可以使用 jstl 表达式,当然,如果使用了 struts2框架等,ognl 表达式是一个完美的选择,提供的具体思路如下:
<jstl:if test="${requestScope.work_order}==a">显示 a div</if> <jstl:elseif test="${requestScope.work_order}==b">显示 b div</elseif> <jstl:else test="${requestScope.work_order}==a">显示 a div</else>
当然${requestScope.work_order}表示从 request 范围中请求work_order参数,就是你查询出来的