您的位置:首页 > 编程语言 > Java开发

struts2标签:<s:if><s:else>实现选择输出

2011-08-19 08:25 357 查看
我的主界面现在想实现一个功能:
就是在主页上有个快速登录的侧边框,当用户在里面进行登录后,此框不再显示登录的信息,而是显示一个欢迎界面。

之前想的是写两个嵌套的页面,然后对session进行判断,后来突然想到struts2提供了一种标签,可以用于控制选择性的输出,然后查了些资料,了解了一些关于<s:if><s:else>的用法。

其实这个标签,只有一个统一的格式,就是:<s:if test="表达式">,当表达式返回一个true时,执行if体内的操作,否则执行<s:else>下的操作。

然后现在的问题就是要考虑test到底要写些什么,但是新的问题也出现了,那就是在test中关“# ” “%{ }”,“%{# }”的用法,查了很多资料,网上说,标签中用#可以取出堆栈上下文中的存放的对象.

用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息. 而对于“%{#}”,一些人说,用于域对象中,比如%{#session.user.userName},将获得user对象的 userName属性值。

虽然这个我还是不太明白,但是我必须要实现从session中取出对象来判断是否为空,而我在用户成功登录后,通过ActionContext.getContext().getSession().put("user",this.getUsername()),将用户名放入session的user对象中,现在的问题就是要判断user是否为空。

我用了很多写法如test="#session.user!=null",但一直返回的是false,后来在网上看到说把session改成attr,于是我写成了<s:if test="#attr.user!=null">,居然成功了,原理暂时还没搞清楚,不过已经实现了自己想要的效果。

不过好像用struts2的拦截器也可以实现,自己先写一个拦截器,判断session是否为空,然后利用struts.xml映射,返回的不同的字符串对应不同的页面。

但是,相对之下,肯定直接用标签库要简单很多。呵呵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: