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} </td>
</s:iterator>
这样输出的是Male
而
HTML code
<s:iterator value="student">
<td><s:property value="sex" /> </td>
</s:iterator>
则输出的是“男”
请问:
用el和struts tag的区别在哪里?
如何能用el直接重载toString方法输出中文?(注:输出${sex.title},这样不算)
------解决方案--------------------帮顶,呵呵
------解决方案--------------------好像${sex}实际上取的是getSex()这样的public方法;
struct2有待商榷...还有,怎么是在枚举中...
------解决方案--------------------没研究过~
------解决方案--------------------UP...........
------解决方案--------------------帮顶
------解决方案--------------------
------解决方案--------------------关注,帮顶!
------解决方案--------------------帮顶 你会给我分吗
------解决方案--------------------涨知识!
------解决方案--------------------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())是可以还原的
------解决方案--------------------