当前位置: 代码迷 >> Java Web开发 >> EL表达式和struts2 tag的区别,该怎么处理
  详细解决方案

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

热度:295   发布时间:2016-04-17 17:18:41.0
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())是可以还原的

------解决方案--------------------
  相关解决方案