OGNL表达式语言基础ABC
OGNL表达式语言能够帮助我们访问存在于ValueStack和ActionContext中的值.
首先让我们来看看通过OGNL来访问一个String数组的变量.在action类中我们创建一个string数组,代码如下:
package vaannila;
public class SampleAction {
private String[] sampleArray;
{
sampleArray = new String[]{"item1","item2","item3"};
}
public String execute()
{
return "success";
}
public String[] getSampleArray() {
return sampleArray;
}
public void setSampleArray(String[] sampleArray) {
this.sampleArray = sampleArray;
}
}
这样,在success中就能够通过下面的方式读取这个数组的值:
<b>Array Usage Examples</b> <hr> <b>sampleArray :</b> <s:property value="sampleArray"/> <b>sampleArray.length :</b> <s:property value="sampleArray.length"/> <b>sampleArray[0] :</b> <s:property value="sampleArray[0]"/> <b>[0].sampleArray :</b> <s:property value="[0].sampleArray"/> <b>top.sampleArray :</b> <s:property value="top.sampleArray"/>
下图就是页面的输出效果:

上面有三种方式能够获取到sampleArray.由于这个sampleArray是在这个stack的top.所以可以通过[0]或者top这个关键字来
直接取到.
下面看看怎么获取到一个ArrayList,在action类中创建一个ArrayList:
package vaannila;
import java.util.ArrayList;
import java.util.List;
public class SampleAction {
private List<String> sampleList = new ArrayList<String>();
{
sampleList.add("listItem1");
sampleList.add("listItem2");
sampleList.add("listItem3");
}
public String execute()
{
return "success";
}
public List<String> getSampleList() {
return sampleList;
}
public void setSampleList(List<String> sampleList) {
this.sampleList = sampleList;
}
}
同样可以通过下面的方式显示这个list:
<b>List Usage Examples</b> <hr> <b>sampleList :</b> <s:property value="sampleList"/> <b>sampleList.size :</b> <s:property value="sampleList.size"/> <b>sampleList[0] :</b> <s:property value="sampleList[0]"/>

下面再来看看怎么读取一个map类型的数据.通过在action类中创建一个map:
package vaannila;
import java.util.HashMap;
import java.util.Map;
public class SampleAction {
private Map<Integer,String> sampleMap = new HashMap<Integer,String>();
private String carMake;
{
sampleMap.put(new Integer(1), "one");
sampleMap.put(new Integer(2), "two");
sampleMap.put(new Integer(3), "three");
}
public String execute()
{
return "success";
}
public Map<Integer, String> getSampleMap() {
return sampleMap;
}
public void setSampleMap(Map<Integer, String> sampleMap) {
this.sampleMap = sampleMap;
}
public String getCarMake() {
return carMake;
}
public void setCarMake(String carMake) {
this.carMake = carMake;
}
}
可以通过下面的方式来访问这个map:
<b>Map Usage Examples</b> <hr> <b>sampleMap[1] :</b> <s:property value="sampleMap[1]"/> <b>sampleMap.size :</b> <s:property value="sampleMap.size"/>
当然你可以直接在jsp中声明一个map:
<s:select list="#{'make1':'Ford', 'make2':'Honda', 'make3':'Toyota'}" name="carMake" label="Select "></s:select>

下面来看看怎么访问在action中model对象的属性name.代码如下:
package vaannila;
public class SampleAction {
private User user = new User();
{
user.setName("Eswar");
}
public String execute()
{
return "success";
}
public String getQuote()
{
return "Don't think, just do";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
可以通过下面的方式来访问:
<b>user.name :</b> <s:property value="user.name"/>
同样可以在jsp中直接调用action中的一个方法:
<b>quote() :</b> <s:property value="quote()"/>

related link:http://www.dzone.com/tutorials/java/struts-2/struts-2-example/struts-2-ognl-expression-language-example-1.html