标签库里面#name %{name} 以及${name}有四面区别阿

解决方案 »

  1.   

    #是OGNL $是EL 那%是什么?
    还有? 经常看到
      

  2.   

    #是strus2标签
    $是jstl
    %是jsp里面的java代码
      

  3.   

    2、“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。    
       
    这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。很有点类似javascript里面的eval_r()功能,例如 :    
       
    var oDiv = eval_r("document.all.div"+index)      
       
    var oDiv = eval_r("document.all.div"+index)    
       
    当index变量为1时,语句就会被当作var oDiv = document.all.div1  var oDiv = document.all.div1来执行。%{}就是起这个作用。举例:     
       
    <s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>       
       
    <s:property value="#myMap['key1']"/>       
       
    <s:url value="#myMap['key1']" />     
       
    <s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>    
       
    <s:property value="#myMap['key1']"/>    
       
    <s:url value="#myMap['key1']"/>    
       
    上面的代码第2行会在页面上输出“value1”,而第3行则会输出"#myMap['key1']"这么一个字符串。 如果将第3行改写成这样:     
       
    <s:url value="%{#myMap['key1']}"/>      
       
    <s:url value="%{#myMap['key1']}"/>    
       
    则输出为“value1”。    
       
         
       
         
       
    这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签“看不懂”类似“#myMap['key1']”的语句时,就要用%{}来把这括进去,“翻译”一下了。