首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

EL表达式和struts2 tag的区别,该怎么处理

2012-01-02 
EL表达式和struts2 tag的区别Java codepublic enum Sex {Male{@Overridepublic String getTitle() {return

EL表达式和struts2 tag的区别

Java code
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里面
HTML code
<s:iterator value="student"><td>${sex}&nbsp;</td></s:iterator>

这样输出的是Male



HTML code
<s:iterator value="student"><td><s:property value="sex" />&nbsp;</td></s:iterator>

则输出的是“男”


请问:
用el和struts tag的区别在哪里?
如何能用el直接重载toString方法输出中文?(注:输出${sex.title},这样不算)


[解决办法]
帮顶,呵呵
[解决办法]
好像${sex}实际上取的是getSex()这样的public方法;
struct2有待商榷...还有,怎么是在枚举中...
[解决办法]
没研究过~
[解决办法]
UP...........
[解决办法]
帮顶
[解决办法]
探讨
好像${sex}实际上取的是getSex()这样的public方法;
struct2有待商榷...还有,怎么是在枚举中...

[解决办法]
关注,帮顶!
[解决办法]
帮顶 你会给我分吗
[解决办法]
涨知识!
[解决办法]
lz的问题是"EL表达式和struts2 tag的区别",其实就因为用到了这两种标签访问同一个变量却得到了不同的结果。这个el和tag具体是访问的那个值需要源码的证明,这里本人没有看就不做评论了。但是从结果可以看出,el访问的是枚举类型的名字"Male",tag访问的是枚举类型的toString()方法。lz之前之所以看到了Male正是枚举类型的名字。

[解决办法]
有空的时候再研究一下了
${mySex},这种没定义就使用的情况,我基本很少见
如果是这样能访问的话,我觉得应该是el调用了enum.name()方法
MySex.Male.name()返回的就是Male
${mySex}=Male,所以${mySex.name}就是Male了
[解决办法]
建议不要用JSTL标签,既然使用的Struts2
为什么不用Struts标签库?

[解决办法]
没仔细研究过,MARK一下
[解决办法]
每天顶帖,打扰了。。
[解决办法]
测试了一下,分析如下:
jstl对于普通的类的引用,比如${student},默认会调用toString方法
而对于枚举类的支持不是很好,只能通过其get、set方法来获取结果,比如${mySex.title}返回就是“男”

具体的可能要去看jstl标签的源码
[解决办法]
如果还不行的话,用Converter吧
可能是jstl对enum作了特殊处理
因为重载toString方法的enum,不能通过enum.valueOf(enum.toString())还原,而enum.valueOf(enum.name())是可以还原的

------解决方案--------------------


EL表达式知道。struts1知道,2是不是不一样呢
[解决办法]
up
[解决办法]
up
[解决办法]

Java code
public enum Sex {       Male{           @Override          public String toString() {               return "男";           }       } ,       Female{           @Override          public String toString() {               return "女";           }       };       public abstract String toString();       }
[解决办法]
探讨
JSTL,EL在Struts2 里面最好不要使用,他们兼容不好,除非你有JSTL的那些过期的标签。

[解决办法]
我感觉还是JSTL好些,更加自由些
[解决办法]
顶,好

[解决办法]
学习
[解决办法]
学习Struts2中。。
[解决办法]
持续关注中
[解决办法]
学习
[解决办法]
学习
[解决办法]
UPING。。。
[解决办法]
学习了,还没用过Struts2
[解决办法]
进来学习
[解决办法]
不大清楚啊
[解决办法]
顶一下!!
[解决办法]
up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up up
[解决办法]
看分多所以我点进来了,看了眼啥也不会,所以我学习了……
[解决办法]
最好去JAVAEYE讨论这个问题,那里有高人能给你解决,在这里高人少点
[解决办法]
走过。。。
[解决办法]
正在学习Struts2中,支持,顶
[解决办法]
再次路过 再次帮顶 另外提醒你一点 如果你选择使用EL的话 也就说明了没有字符过滤器的支持 明白
------解决方案--------------------


很诡异的问题~~奇怪了
[解决办法]
学习了..
[解决办法]
up 
正在学习中!!
[解决办法]
确实不错
[解决办法]
路过
[解决办法]
没有解答的能力,学习,帮顶
[解决办法]
学习下
[解决办法]
VELOCITY的人士飘过
[解决办法]
顶顶
[解决办法]
MARK
[解决办法]
去看一下EL的实现,你会发现用${}表达式去取enum类型的值的时候,它用的是enum.name()方法。而标签的输出的时候用的是enum的toString()方法。
[解决办法]
DING
[解决办法]
用工具调试下,就OK了
[解决办法]
哈,再送楼主一段代码,在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();
}


[解决办法]
哈,至于91楼说的,看jsp编译结果的源代码,还真看不出东西来
[解决办法]
对了,楼主给不给分呀?这问题我也是看了好一会儿了,我在89楼已经给正解了
[解决办法]
无语了!这段代码不用你的,这是EL ${}的实现代码。你在页面是${var}人家调用的就是这段代码。

热点排行