OGNL:Object-Graph Navigation Language,即对象图导航语言,它在struts2中很强大,但是离开了struts2基本上没什么用,其他框架很少支持这个语言。
它可以访问对象的任意属性和方法,struts2会解析表达式的内容,有与表达式相关的数据则会显示,否则什么都不显示
<s:property value="justtest"/><br> //不显示任何内容
<s:property value="'test'"/><br> //显示test,因为把表达式转为字符串来
<s:property value="'test'.length()"/><br> //调用了String类的length()方法,显示test的长度 4
<s:property value="'test'.toUpperCase()"/><br> //显示TEST
<s:property value="@java.lang.Integer@MAX_VALUE"/><br> //取Integer类的静态属性
<s:property value="@java.lang.Math@random()"/><br> //调用Math类的静态方法。这里需要先去struts.xml中配置一个struts.ognl.allowStaticMethodAccess属性。
字符串转ognl表达式:%{}
ognl表达式转字符串:%{""} %{''} '' "" (是单引号还是双引号要看外层是单引号还是双引号)
首先来看几种标签里的值默认是什么类型:
<input type="text" name="name1" value="%{i am also a string}"><br>
这是原生的html标签,value对应的引号里面会当成字符串来解析,不管加不加%{},最后输出到页面的都是字符串,不会当作ognl表达式来解析,所以最后显示到页面的就是%{i am also a string}
<s:textfield name="name" value="%{i am also a string}"></s:textfield>
这是struts2的一个标签,value默认会当字符串来解析,但我们可以加上%{}来把里面的类容变成OGNL表达式,所以这里什么都不显示
<s:property value="'test'"/><br>
这是struts2中的标签,value默认就是ognl表达式,这里我们加上了单引号,将它变为了字符串解析,所以这里会输出 test.
使用ognl表达式操作list集合和map集合:
struts2单选按钮: //这种list的方式无法指定不同的key\value,这里key也是boy,value也是boy。
<s:radio list="{'boy','girl'}" name="sexstruts2" label="sex"></s:radio>
struts2单选按钮,用map的方式 //这种用map的方式成功解决了上面的问题,key是man,value是1
<s:radio list="#{'1':'man','0':'women'}" name="sexmap" lable="sex:"></s:radio>