首页 > 代码库 > struts2什么情况用#和EL表达示
struts2什么情况用#和EL表达示
1:struts2标签使用中,什么时候用#,什么时候可以不用#
值栈中的对象的不使用#,非值栈中的对象使用#
如果不理解值栈的作用,简单点理解:当前action,或者处于action链中的action所拥有的属性,并且为该属性提供了getter和setter方法,那么在jsp中就不需要使用#,除此之外需要使用#,那么从这里你就可以知道action的属性如果提供了getter和setter方法,那么这些属性值就会放置到值栈中
---------------------------------------------------------------------------------------------------------
原理:这个我们要从很深刻的问题说起。什么是:根--ValueStack(值栈),什么是:StackCont
ext(上下文),什么是:ActionContext;
*Struts2的#号可以用在jsp页面(多见),也可以用在java代码里(少见)。
2:EL表达式
EL表达示的作用是在jsp页面简化嵌入java的开发。(EL用在jsp页面)
例如jsp页面
<% String duan=(String)request.getAttribute("duan"); %> 如果用EL表达式的话,就可以用 ${requestScope.duan}
注意事项:
1、语法结构
${expression}
2、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${user.My-Name}应当改为${user["My-Name"] }
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量
3、变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope
struts2什么情况用#和EL表达示