ognl取值的代码

来源:互联网 发布:淘宝联盟红包很无耻 编辑:程序博客网 时间:2024/06/15 15:34

1.首先设置后台User数据 

分别设置有id和name和地址

再用有参和无参将之初始化:

接着用SET、get方法将之对外封装

package ognl;

public class User {
    
    private int id;
    
    private String name;
    
    private Adress adress=new Adress("广东","gz");

    
    
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }

    public User(int id, String name) {
        super();
        this.id = id;
        this.name = name;
        this.adress = adress;
    }

    public Adress getAdress() {
        return adress;
    }

    public void setAdress(Adress adress) {
        this.adress = adress;
    }

    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;
    }
}

2.设置后台action控制

首先继承actionsupport,再去重写里面的execute方法

 再用struts2中比较万能的struts2的ActionContext取得联系上下文的request,再以map集合封装

最后用map集合来存储外部数据 

 也可以直接使用ActionContext来存储数据,既是利用ActionContext.getContextMap().put();在put中放入数据

案例:

package ognl;

import java.util.Map;

import org.junit.Test;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class OgnlDemo2 extends ActionSupport{
//这里是有参方法封装利用   

private User user=new User(100,"sam");    
    public User getUser() {
        return user;
    }

//set、get方法封装
    public void setUser(User user) {
        this.user = user;
    }


    @Override
        public String execute() throws Exception {
            
        ActionContext ac=ActionContext.getContext();
        //映射数据
        //这个是一个上下文的map,其实就是一个request
    //    ac.getContextMap().put("request_data", "request_data");
        //数据存储数据
        //传统来说:用 这种方法是比较好的
            Map<String, Object>map=(Map<String, Object>) ac.get("request");
            map.put("request_data", "request_data");
            map.put("cn", "china");
         
        
            ac.getSession().put("session_data", "session_data");
            ac.getApplication().put("application_data", "application_data");
            //二、值栈对象的存储数据的原理
            ValueStack vs=ac.getValueStack();
            //栈顶
        /*    vs.getRoot().push(new User(1002,"tom"));
            //移除栈顶元素
            vs.pop();*/
            vs.set("user1", new User(1,"sam"));
            vs.set("user2", new User(2,"yezi"));
            System.out.println(vs);
            return super.execute();
        }
}


3.最后可以设置前台的jsp页面了

首先在jsp页面中必须要学会运用ognl表达式

取值分为:取根元素和非根元素两种区别

其一:什么是根元素什么是非根元素

根元素:即action对象和全局属性

访问这两者的区别在于根元素不需要加#直接拿来用而非根是需要加#号的

最后使用取值方法来直接呈现在jsp页面上


案例:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"  %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
 
  <body>
  <!--页面,必须要拿到valuestack -->
 
  <br/>1.取根元素的值<br/>
  <s:property value="user.id"/>
    <s:property value="user.name"/>
          <s:property value="user.adress"/>
      <s:property value="user.adress.city"/>
               <s:property value="user.adress.province"/>
               
 <br/>2.取非根元素的值<br/>
 <s:property value="#request.cn"/><!--request数据也叫作上下文数据-->
 <s:property value="#session.session_data"    />
 <s:property value="#application.application_data"/>
 <br/>
 <!-- 自动找request/session/application,找到后立刻返回-->
 <!--attr是比较强大一些,因为attr是和他们是同一个对象的。-->
 <s:property  value="#request_data" />  
  <s:property  value="#attr.session_data" />  
   <s:property  value="#attr.application_data" />
   <!--   获取请求的参数数据-->
  <br/>
      <s:property value="#parameters.userName"/>
 
  <!-- struts的调试标签 可以观测值栈数据 -->
  <s:debug></s:debug>
  </body>
</html>



然后部署文件启动tomcat,在浏览器里访问(当然在这里,我没有亮出配置web.xml方法)

这就是ognl取值的过程(其实也就是在jsp页面上呈现的代码而已利用s:property的value从action中获取的值


0 0
原创粉丝点击