EL表达式和struts2 tag的区别

herowzz 2009-04-11 09:08:02
加精

public enum Sex {
Male{
@Override
public String getTitle() {
return "男";
}
} ,
Female{
@Override
public String getTitle() {
return "女";
}
};
public abstract String getTitle();

@Override
public String toString() {
return this.getTitle();
}
}


对象Student 有个属性是 Sex sex

jsp里面

<s:iterator value="student">
<td>${sex} </td>
</s:iterator>

这样输出的是Male




<s:iterator value="student">
<td><s:property value="sex" /> </td>
</s:iterator>

则输出的是“男”


请问:
用el和struts tag的区别在哪里?
如何能用el直接重载toString方法输出中文?(注:输出${sex.title},这样不算)
...全文
4573 124 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
124 条回复
切换为时间正序
请发表友善的回复…
发表回复
痛彻心扉 2011-07-19
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 herowzz 的回复:]
引用 18 楼 zl_bright 的回复:
看看你的代码,有没有
其他地方给这个"sex"赋过值,
${sex}这种写法,系统会在所有作用域寻找这个值,
就算有输出,也不一定是从那个枚举中找到的


怎么开始躲猫猫了?明明自己有错误,还非得找一堆理由。
[/Quote] fs
hahajingshiwo 2011-07-11
  • 打赏
  • 举报
回复
我是 来学习的
tyzqqq 2010-09-08
  • 打赏
  • 举报
回复
kktarena 2010-09-08
  • 打赏
  • 举报
回复
up
正在学习中!!
wondersuyi 2009-04-27
  • 打赏
  • 举报
回复
从头看了下来,貌似101楼已经解决了,虽然没看出做了什么具体的改动。。。
难道修改下xml就OK了?
allan0527 2009-04-27
  • 打赏
  • 举报
回复
。。。
能显示出来结果有什么好奇怪的。。。
标签最后都会编译成JAVA代码,能通用很正常啊。。。
s标签和el表达式都在一个servlet类里(jsp都会编译成servlet),上面s标签定义的变量下面el可以接着写。。。

还是s2省略了一个变量声明而已,
<s:iterator value="student">
<td>${sex} </td>
</s:iterator>

转换成类似代码
Iterator it = student.iterator(); //标签中的value="student"
String res = null;
while(it.hasNext()){
Object obj = it.next();
res = obj.getClass().getMethod("getSex",null).invoke(obj,null); //${sex}转换的代码
out.print(res);
}
应该其中obj的命名没有实际意义,取什么名字都不会影响结果,所以在标签中省略了,让使用标签的人不用关心那个命名而已。。。
qybao 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 99 楼 flyasfly 的回复:]
无语了!这段代码不用你的,这是EL ${}的实现代码。你在页面是${var}人家调用的就是这段代码。
[/Quote]
果然如我猜的一样,Enum作了特殊处理,返回Enum.name();

LZ精神虽然可佳,但是如果EL本身就不支持你的${},你再费劲地去求解也没用,即使得出解法,也是绕了个圈子,除非像你自己说的你去改EL的源码然后重新编译
redlotus_lyn 2009-04-27
  • 打赏
  • 举报
回复
区别:
1.EL没有自动格式话的功能。即:如果输出str = "<font size=\"12\">男</font>"
2.struts2默认支持的表达式为OGNL。不建议使用EL。
3.根据struts2版本不同,struts2判断标签不支持EL。
winnernoom 2009-04-27
  • 打赏
  • 举报
回复
学习了
大川101 2009-04-27
  • 打赏
  • 举报
回复
顶顶!学习
lipei007 2009-04-23
  • 打赏
  • 举报
回复
学习,帮顶!
qq707472 2009-04-23
  • 打赏
  • 举报
回复
wxzyydy 2009-04-21
  • 打赏
  • 举报
回复
帮楼主顶顶,顺便接点分,感谢楼主
hixiangni555 2009-04-21
  • 打赏
  • 举报
回复
帮顶
wsmh3333 2009-04-21
  • 打赏
  • 举报
回复
哇。。。4月11号地帖子还没沉底
herowzz 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 99 楼 flyasfly 的回复:]
无语了!这段代码不用你的,这是EL ${}的实现代码。你在页面是${var}人家调用的就是这段代码。
[/Quote]

那你发这段代码有什么用?要我改人家的源码吗?
flyasfly 2009-04-20
  • 打赏
  • 举报
回复
无语了!这段代码不用你的,这是EL ${}的实现代码。你在页面是${var}人家调用的就是这段代码。
tianya_yanhaoyu 2009-04-20
  • 打赏
  • 举报
回复
UP
herowzz 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 94 楼 flyasfly 的回复:]
哈,再送楼主一段代码,在EL当然,取回来指定变量的值后,会把它转换为String类型的值,然后处理方式如下:
if (obj == null) {
return "";
} else if (obj instanceof String) {
return (String) obj;
} else if (obj instanceof Enum) {
return ((Enum) obj).name();
} else {
return obj.toString();
}
[/Quote]

请问这段代码写在哪里?action还是jsp里?
action里难道我还要多循环一次转换?jsp里写这种代码你不觉得很丑陋?
herowzz 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 103 楼 flyasfly 的回复:]
没啥意思,就是告诉你,人家代码是这么写的,既然得不到你想要的,就换个方式比如用c:out之类。要么指望人家版本升级后,改一下。
[/Quote]

恩,谢谢你的回复,看来只有等待升级了...



[Quote=引用 104 楼 heavenfeng 的回复:]
<s:iterator value="student">
<td>${sex}  </td>
</s:iterator>
这种方式属于混用么?
[/Quote]
这种方式不属于混用,<s:iterator value="${name}"> 这样才属于混用.
加载更多回复(99)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧