jstl表达式的使用

目录
1 STRTUS2 和 EL,JSTL 2
1.1 STRUTS2,EL,JSTL标签 2
1.1.1 struts2截取一段字符串 (struts2, fn) 2
1.1.1 Struts2 获得长度 2
1.1.2 <s:if><c:if > 2
1.1.3 Struts2拦截器 用户登录验证(2009-12-25 12:52:56) 3

1 STRTUS2 和 EL,JSTL
1.1 STRUTS2,EL,JSTL标签
1.1.1 STRUTS2截取一段字符串 (STRUTS2, FN)

Struts2 标签的特性支持大部分java方法
<s:property value=" dateshanggang.substring(0,10)" />
EX:
<s:property value="dateshanggang.substring(11,dateshanggang.length())" />
Fn:需要导入
--标签库
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
--从什么地方拆分
<c:set var="HH">${fn:substringBefore(chidaoTime/3600,'.')}</c:set>
--list大小是否给空
<c:if test="${empty list || fn:length(list) == 0}"> 没有记录哦 </c:if>
EX:
<c:if test="${empty list || fn:length(list) == 0}"> 没有记录哦 </c:if>
<c:set var="HH">${fn:substringBefore(chidaoTime/3600,'.')}</c:set>
1.1.1 STRUTS2 获得长度
<s:property value=" dateshanggang.length())" />
{empty list || fn:length(list) == 0}
${fn:length(property)}

1.1.2 <S:IF><C:IF >
C标签没有 <c:else> 只有单<c:if>
而<s:if>有<s:else> 可以配对使用
但是能用<c:if> 尽量不要用<s:if>
原因? 自己想吧!
EX:
<c:if test="${fn:length(content) <= 8}" var="ifresult">
<s:property value="content" />
</c:if>
<c:if test="${!ifresult}">
<s:property value="content.substring(0,8)" />..</a> 
</c:if>
EX:<s:if><s:else>


1.1.3 STRUTS2拦截器 用户登录验证(2009-12-25 12:52:56)

Struts2拦截器 用户登录验证(2009-12-25 12:52:56)转载标签:杂谈

实现方式:
实现Interceptor接口

init() {} 初始化时调用
destroy() {} 销毁时调用
class MyInterceptor implements Interceptor {
private String hello;
//setter...getter...
public void init() {
System.out.println("init()...");
System.out.println( hello );
}
public void destroy() {
System.out.println("destroy()...");
}
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("intercept()1...");
//拦截器有拦截器站
//invoke()将判断是否还有下一个拦截器,有就执行下一个拦截器,没有则开始执行被拦截的类
String result = invocation.invoke();
System.out.println("finish1...");
return result;
}
继承AbstractInterceptor

该类实现了Interceptor接口,并且空实现了init()和destroy()方法

public class MyInterceptor extends AbstractInterceptor {

public String intercept(ActionInvocation invocation) throws Exception {

System.out.println("intercept()2...");

String result = invocation.invoke();

System.out.println("finish2...");

return result;

}

}


继承MethodFilterInterceptor

public class MyInterceptor3 extends MethodFilterInterceptor {
@Override
public void init() {
System.out.println("init3");
}
//intercept()已经实现好了,不用去管他
//需要重写一下doIntercept
@Override
public String doIntercept(ActionInvocation invocation) throws Exception {
// 取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
// 取出名为user的session属性
User user = (User) session.get("user");
// 如果没有登陆,返回重新登陆
if (user != null) {
return invocation.invoke();
} else {
return "login";
}
}
}

MethodFilterInterceptor中包含两个protected的属性
Set includeMethods : 包含谁
Set excludeMethods : 排除谁

<interceptors>
<interceptor name="myInterceptor3" class="..."></interceptor>
</interceptors>

<action ...>
<result ...>...</result>
...

<interceptor-ref name="myInterceptor3" >
包含 要拦截方法 多个用逗号分开
<param name="includeMethods">execute,test</param>

排除 不拦截的方法 多个用逗号分开
<param name="excludeMethods">execute</param>
</interceptor-ref>
<interceptor-ref name="defaulteStack" />
</action>
struts.xml配置
<package name="default" namespace="" extends="struts-default" >
<!-- 定义一个名为 authority的拦截器 -->
<interceptors>
<!-- 定义权限检查拦截器 -->
<interceptor name="authority"
class="com.cbiesepe.core.AuthorityInterceptor" />

<!-- 定义一个包含权限检查的拦截器栈 -->
<interceptor-stack name="myDefaultStack">
<!-- 定义拦截器栈包含authority拦截器 需要过滤的方法 login 要加在此 -->
<interceptor-ref name="authority">
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 设置全局默认的拦截器栈-->
<default-interceptor-ref name="myDefaultStack" />
<global-results>
<result name="main">/WEB-INF/jsp/main.jsp</result>
<result name="login">/WEB-INF/jsp/user/login.jsp</result>
</global-results>
</package>
以下包中只需继承default包即可实现拦截
<package name="user" namespace="/user" extends="default" >
<action name="*User" class="userAction" method="{1}" >
<result name="main">/WEB-INF/jsp/main.jsp</result>
<result name="regist">/WEB-INF/jsp/user/regist.jsp</result>
<result name="login">/WEB-INF/jsp/user/login.jsp</result>
<result name="add">/WEB-INF/jsp/user/addUser.jsp</result>
<result name="list" type="redirect">user/listUser.action</result>
<result name="show">/WEB-INF/jsp/user/showUser.jsp</result>
<result name="update">/WEB-INF/jsp/user/userUpdate.jsp</result>
<result name="modpass">/WEB-INF/jsp/user/modPassword.jsp</result>
<result name="success">/WEB-INF/jsp/user/userList.jsp</result>
</action>
</package>
不需拦截的不用继承就可以
<package name="index" namespace="/" extends="struts-default" >
<action name="channel" class="channelAction" method="index" >
<result name="index">/index.jsp</result>
<result name="register">/register.jsp</result>
<result name="trader">/trader.jsp</result>
</action>
</package>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值