码迷,mamicode.com
首页 > 其他好文 > 详细

Struts 2 OGNL Expression Tutorial with Examples

时间:2015-06-20 15:36:27      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

 

OGNL is Object Graph Navigation Language. OGNL is an expression that can set and get the property of java object. In struts 2 OGNL is used to associate Action class and UI components. OGNL uses a standard naming convention to evaluate the Expression. OGNL is the root object for the value stack. In Struts 2 value stack is a set of several objects but OGNL looks value stack as a single object. OGNL expression can set and get values from application, session, value stack, action, request, parameters, and attr. 
Value stack is the root of OGNL. Action class resides in value stack so we directly fetch action class items using OGNL expression as

<s:property value="students"/>

  

But in case of session or request we need to use as below.

<s:property value="#session[‘sessionPropKey‘]"/> 
<s:property value="#request[‘requestPropKey‘]"/>

  

In our struts 2 examples, we will deal with action class properties to 

1. Fetch Array Using OGNL as <s:property value="students[0]"/> 
2. Fetch List Using OGNL as <s:property value="studentList[0]"/> 
3. Display Map Using OGNL as <s:property value="studentMap[‘A‘]"/> 
4. Use next level OGNL expression as <s:property value="college.name"/> 
5. Fetch action methods passing arguments Using OGNL as <s:property value="%{getSum(2,3)}" /> 

And display results on UI components. We are providing complete example to run the demo.

Download Source Code

Find the eclipse structure of our example.

技术分享

Display Array Using OGNL in Struts 2

Create an array in action class. Assign values in array. Create setter and getter methods for the defined property. 
UserActionOne.java

package com.concretepage.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/user")
@Action("/userOne")
@ResultPath(value="/")
@Result(name="success",location="userOne.jsp")
public class UserActionOne extends ActionSupport{
	private  String[] students = {"Ramesh","Mahesh","Dinesh"};
	public String execute() {
	   return SUCCESS; 
	}
	public String[] getStudents() {
		return students;
	}
	public void setStudents(String[] students) {
		this.students = students;
	}
}

  

In JSP we can fetch array values as below using OGNL expression. 
userOne.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>Struts 2 OGNL Example</title>
</head>
<body>
<h3> Struts 2 Array OGNL Example </h3>

<br/><b>students: </b><s:property value="students"/>
<br/><b>students.length:</b> <s:property value="students.length"/>
<br/><b>students[0]:</b> <s:property value="students[0]"/>
<br/><b>students[1]:</b> <s:property value="students[1]"/>
<br/><b>students[2]:</b> <s:property value="students[2]"/>
<br/><b>top.students: </b><s:property value="top.students"/>

</body>
</html> </pre>

  

Use the link http://localhost:8080/Struts2Demo-1/user/userOne to see the output.

技术分享

Display List Using OGNL in Struts 2

To work with list, create a list property in action class. Assign some values to the list and provide setter and getter methods. 
UserActionTwo.java

package com.concretepage.action;
import java.util.Arrays;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/user")
@Action("/userTwo")
@ResultPath(value="/")
@Result(name="success",location="userTwo.jsp")
public class UserActionTwo extends ActionSupport{
	private  List<String> studentList = Arrays.asList("Ramesh","Mahesh","Dinesh");
	public String execute() {
	   return SUCCESS; 
	}
	public List getStudentList() {
		return studentList;
	}
	public void setStudentList(List studentList) {
		this.studentList = studentList;
	}
}

  

In JSP, list can be fetched in the same way as array using OGNL expression. 
userTwo.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>Struts 2 OGNL Example</title>
</head>
<body>
<h3>Struts 2 List OGNL Example</h3>

<br/><b>studentList: </b><s:property value="studentList"/>
<br/><b>studentList.size():</b> <s:property value="studentList.size()"/>
<br/><b>studentList[0]:</b> <s:property value="studentList[0]"/>
<br/><b>studentList[1]:</b> <s:property value="studentList[1]"/>
<br/><b>studentList[2]:</b> <s:property value="studentList[2]"/>
<br/><b>top.studentList: </b><s:property value="top.studentList"/>

</body>
</html>

  

Use the link http://localhost:8080/Struts2Demo-1/user/userTwo to see the output.

技术分享

Display Map Using OGNL in Struts 2

In the same way we can access map using OGNL. Create a map and assign values in action class. And provide setter and getter methods. 
UserActionThree.java

package com.concretepage.action;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/user")
@Action("/userThree")
@ResultPath(value="/")
@Result(name="success",location="userThree.jsp")
public class UserActionThree extends ActionSupport{
	private  Map<String,String> studentMap = new HashMap<String,String>();
	{
		studentMap.put("A","Ramesh");
		studentMap.put("B","Mahesh");
		studentMap.put("C","Dinesh");
	}
	public String execute() {
	   return SUCCESS; 
	}
	public Map<string, string=""> getStudentMap() {
		return studentMap;
	}
	public void setStudentMap(Map<string, string=""> studentMap) {
		this.studentMap = studentMap;
	}
}

  

In JSP use OGNL expression to fetch map with the key as usually we do in java. 
userThree.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>Struts 2 OGNL Example</title>
</head>
<body>
<h3>Struts 2 Map OGNL Example</h3>

<br/><b>studentMap: </b><s:property value="studentMap"/>
<br/><b>studentMap.size():</b> <s:property value="studentMap.size()"/>
<br/><b>studentMap[‘A‘]:</b> <s:property value="studentMap[‘A‘]"/>
<br/><b>studentMap[‘B‘]:</b> <s:property value="studentMap[‘B‘]"/>
<br/><b>studentMap[‘C‘]:</b> <s:property value="studentMap[‘C‘]"/>
<br/><b>top.studentMap: </b><s:property value="top.studentMap"/>

</body>
</html>

  

Use link http://localhost:8080/Struts2Demo-1/user/userThree to see output.

技术分享

Use Next Level OGNL in Struts 2

To use next level OGNL expression, we are introducing a user bean College where we define id and name. 
College.java

package com.concretepage.vo;
public class College {
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

  

Use the college bean in action class and set some values. Define corresponding setter and getter method. 
UserActionFour.java

package com.concretepage.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import com.concretepage.vo.College;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/user")
@Action("/userFour")
@ResultPath(value="/")
@Result(name="success",location="userFour.jsp")
public class UserActionFour extends ActionSupport{
    private College college = new College();
    {
    	college.setId(10);
    	college.setName("UP College");
    }
    public String execute() {
	return SUCCESS; 
    }
    public College getCollege() {
	return college;
    }
    public void setCollege(College college) {
	this.college = college;
    }
}

  

In JSP use next level OGNL expression to evaluate the values. 
userFour.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>Struts 2 OGNL Example</title>
</head>
<body>
<h3> Struts 2 Next Level OGNL Example </h3>

<br/><b>college.id: </b><s:property value="college.id"/>
<br/><b>college.name:</b> <s:property value="college.name"/>
<br/><b>college.name.length():</b> <s:property value="college.name.length()"/>

</body>
</html>

  

技术分享

Fetch Action Methods Passing Arguments Using OGNL in Struts 2

In this example we will deal with action class methods for OGNL expression to evaluate methods. Methods can be two types, one that will not accept any arguments and second one that accepts arguments. In the action class we have taken both type of methods. 
UserActionFive.java

package com.concretepage.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/user")
@Action("/userFive")
@ResultPath(value="/")
@Result(name="success",location="userFive.jsp")
public class UserActionFive extends ActionSupport{
  	public String execute() {
	   return SUCCESS; 
	}
	public String getMsg(){
		return "Hello World!";
	}
	public int getSum(int a, int b){
		return a+b;
	}
}

  

In JSP OGNL framework uses different approaches to fetch methods. Keep attention on JSP code how to fetch these two different methods. 
userFive.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>Struts 2 OGNL Example</title>
</head>
<body>
<h3> Struts 2 Method OGNL Example </h3>

<br/><b>getMsg(): </b><s:property value="msg"/>
<br/><b>getSum(a,b): </b><s:property value="%{getSum(2,3)}" />

</body>
</html>

  

Use the link http://localhost:8080/Struts2Demo-1/user/userFive to check the output.

技术分享

Download Source Code

Struts 2 OGNL Expression Tutorial with Examples

标签:

原文地址:http://www.cnblogs.com/hephec/p/4590607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!