OGNL(Object-Graph Navigation Language)是一个功能强大的表达式语言,用来获取和设置Java对象的属性。
如下例子:
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML>
<html>
<head>
<title>login</title>
<meta charset="utf-8">
</head>
<body>
<form action="login" methor="get">
<p><input type="text" name="user.name" placeholder="姓名:"/></p>
<p><input type="password" name="user.pass" placeholder="密码:"/></p>
<p><input type="text" name="user.age" placeholder="年龄:"/></p>
<p><input type="text" name="user.create_at" placeholder="入学时间:yyyy-MM-dd"/></p>
<p><input type="submit" value="submit"/></p>
</form>
</body>
</html>
result.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML>
<html>
<head>
<title>OGNL-练习</title>
<meta chartset='utf-8'>
</head>
<body>
<h3>前台表单输入的值</h3>
<p><s:property value="user.name"/></p>
<p><s:property value="user.pass"/></p>
<p><s:property value="user.age"/></p>
<p><s:property value="user.create_at"/></p>
<h3>4.2.1 OGNL普通方法访问</h3>
<p>调用值栈对象中的普通方法1-user.helloworld():<s:property value="user.helloworld()"/></p>
<p>调用值栈对象中的普通方法2-user.name.length():<s:property value="user.name.length()"/></p>
<p>调用LoginAction中的普通方法-test():<s:property value="test()"/></p>
<h3>4.2.2 OGNL静态方法访问</h3>
<p>调用LoginAction中的静态方法1-@top.k10000.LoginAction@getSta():<s:property value="@top.k10000.LoginAction@getSta()"/></p>
<p>调用LoginAction中的静态方法2-@vs@getSta():<s:property value="@vs@getSta()"/></p>
<h3>4.2.3 OGNL默认类Math的访问</h3>
<p>调用Math类中的静态方法1-@java.lang.Math@min(1,2):<s:property value="@java.lang.Math@min(1,2)"/></p>
<p>调用Math类中的静态方法2-@@min(1,2):<s:property value="@@min(1,2)"/></p>
<p>调用Math类中的字段-@@PI:<s:property value="@@PI"/></p>
<h3>4.2.4 OGNL调用普通类的构造方法</h3>
<p>调用Student普通类的构造方法-new top.k10000.Student('zhiquan','23','95.5'):<s:property value="new top.k10000.Student('zhiquan','23','95.5')"/></p>
<p>调用Student普通类的构造方法并访问name字段-new top.k10000.Student('zhiquan','23','95.5').name:<s:property value="new top.k10000.Student('zhiquan','23','95.5').name"/></p>
<h3>4.2.5 OGNL集合对象</h3>
<p>获取List:<s:property value="myList"/></p>
<p>获取List中的第一个元素:<s:property value="myList[0]"/></p>
<p>获取Set:<s:property value="mySet"/></p>
<p>获取Set中的第一个元素(Set无序,不能取到):<s:property value="mySet[0]"/></p>
<p>获取Map:<s:property value="myMap"/></p>
<p>获取Map中的key=m1的元素的值:方法一:<s:property value="myMap.m1"/>方法二:<s:property value="myMap['m1']"/></p>
<p>获取List的大小:<s:property value="myList.size"/>|<s:property value="myList.size()"/></p>
<p>获取Map中所有的键:<s:property value="myMap.keys"/></p>
<p>获取Map中所有的值:<s:property value="myMap.values"/></p>
<h3>4.2.6 OGNL中top用法</h3>
<p>N语法[0]:<s:property value="[0]"/></p>
<p>N语法[1]:<s:property value="[1]"/></p>
<p>N语法[0].top:<s:property value="[0].top"/></p>
<p>N语法[1].top:<s:property value="[1].top"/></p>
<p>N语法top:<s:property value="top"/></p>
<p>N语法取值:<s:property value="[0].user.name"/></p>
<p>N语法取值:<s:property value="top.user.name"/></p>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<package name="mypackage" extends="struts-default">
<action name="login" class="top.k10000.LoginAction">
<result name="success">/result.jsp</result>
</action>
</package>
</struts>
User.java
package top.k10000;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class User {
private String name;
private String pass;
private int age;
private Date create_at;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public int getAge() {
return age;
}
public void setAge(String age) {
this.age = Integer.parseInt(age);
}
public Date getCreate_at() {
return create_at;
}
public void setCreate_at(String create_at) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
this.create_at = sdf.parse(create_at);
} catch (ParseException e) {
e.printStackTrace();
}
}
public String helloworld(){
return "helloworld!";
}
}
Student.java
package top.k10000;
public class Student {
private String name;
private int age;
private double score;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public Student(String name,int age,double score){
this.name = name;
this.age = age;
this.score = score;
}
}
LoginAction.java
package top.k10000;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import top.k10000.User;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private User user;
private List myList = new ArrayList();
private Set mySet = new HashSet();
private Map myMap = new HashMap();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List getMyList() {
return myList;
}
public void setMyList(List myList) {
this.myList = myList;
}
public Set getMySet() {
return mySet;
}
public void setMySet(Set mySet) {
this.mySet = mySet;
}
public Map getMyMap() {
return myMap;
}
public void setMyMap(Map myMap) {
this.myMap = myMap;
}
public String test(){
return "这是test方法的返回值";
}
public static String getSta(){
return "这是getSta静态方法的返回值";
}
public String execute(){
myList.add("list1");
myList.add("list2");
myList.add("list3");
mySet.add("set1");
mySet.add("set2");
mySet.add("set3");
myMap.put("m1","map1");
myMap.put("m2","map2");
myMap.put("m3","map3");
return "success";
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/151224.html