zoukankan      html  css  js  c++  java
  • struts2入门之OGNL

    OGNL是一个表达式语言,可以和EL表达式做类比,至于OGNL和struts2的关系,我想说的是,它们之间根本没有关系。之所以二者经常一起提起,是因为二者经常会一起用,struts2提供的标签中的属性里可以写ognl表达式,用于获取数据,这些数据既可以从域对象中获取,也可以从值栈中获取,这取决于你的数据是放在域对象中还是值栈中,下面贴出jsp页面获取值栈中的数据对象集合:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2 pageEncoding="UTF-8"%>
     3 <%@ taglib uri="/struts-tags" prefix="s" %>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>Insert title here</title>
     9 </head>
    10 <body>
    11 <p>action中定义变量并生成get方法,来获取值栈中的数据(对象)</p>
    12 <s:property value="user.userName"/>
    13 <s:property value="user.passWord"/>
    14 <p>action中定义变量并生成get方法,来获取值栈中的数据(list集合)</p>
    15 <s:iterator value="list">
    16 <s:property value="userName"/>
    17 <s:property value="passWord"/>
    18 </s:iterator>
    19 <p>action中定义变量并生成get方法,来获取值栈中的数据(list集合另一种方式)</p>
    20 <s:iterator value="list" var="user">
    21 <s:property value="#user.userName"/>
    22 <s:property value="#user.passWord"/>
    23 </s:iterator>
    24 </body>
    25 </html>

    我的action代码如下,提供了存储对象集合到值栈中:

     1 package com.cczhao.struts.valuestack;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import com.cczhao.struts.entity.User;
     7 import com.opensymphony.xwork2.ActionContext;
     8 import com.opensymphony.xwork2.ActionSupport;
     9 import com.opensymphony.xwork2.util.ValueStack;
    10 
    11 /**
    12  * 
    13  * 功能: TODO 往值栈中存放数据.<br/>
    14  * date: 2017年6月25日 下午12:05:55 <br/>
    15  *
    16  * @author cczhao
    17  * @version
    18  * @since JDK 1.8
    19  */
    20 public class ValueStack3Action extends ActionSupport {
    21     private static final long serialVersionUID = 1L;
    22     private User user = new User();
    23     private User user2 = new User();
    24     private List<User> list = new ArrayList<>();
    25 
    26     public List<User> getList() {
    27         return list;
    28     }
    29 
    30     public User getUser2() {
    31         return user2;
    32     }
    33 
    34     public User getUser() {
    35         return user;
    36     }
    37 
    38     // 方式3:通过在action中定义变量,并生成get方法
    39     public String execute() throws Exception {
    40         ActionContext context = ActionContext.getContext();
    41         ValueStack stack = context.getValueStack();
    42         
    43         user.setPassWord("123456");
    44         user.setUserName("曾柔");
    45         user2.setPassWord("111");
    46         user2.setUserName("双儿");
    47         list.add(user);
    48         list.add(user2);
    49         return "success";
    50     }
    51 }

    OGNL表达式语言结合struts2的标签进行使用能很好的用于获取后台的实体数据,上面的action只显示了一种往值栈中存放数据,然后在jsp中利用struts2标签+ognl来获取数据,其实往值栈中存放数据还有两种方式:set方式和push方式。但这两种方式占用空间较大,但是灵活度高点,可以斟酌使用,但在实际开发中我觉的在action中声明变量并生成get方法,这种方式往值栈中存放数据的方式更常用一点,因为平时前后台交互的时候大多是对象在交互,且可能是对象集合。

    刚看了这么多,以后如果有新的认识会继续更新。

    --------------------------------------------分割线---------------------------------------------

    新增常见的几个struts2的标签:

    s:property 和ognl表达式在jsp中获取值栈数据
    s:iterator 获取值栈list集合数据
    s:debug 查看值栈结构和数据
    还有一个比较重要的struts2标签:s:form
    <s:form action="" method="" enctype="">
    <!-- 普通输入框 -->
    <s:textfield name="userName" label="用户名"></s:textfield>

    <!-- 密码框 -->
    <s:password name="passWord" label="密码"></s:password>

    <!-- 单选框(页面显示值可能和value值不一样) -->
    <s:radio list="{'男','女'}" name="gender"></s:radio>
    <s:radio list="#{'1':'男','0':'女'}" name="gender" label="性别"></s:radio>

    <!-- 复选框 -->
    <s:checkbox list="{'吃饭','睡觉','泡妞'}" name="hobby" label="爱好"></s:checkbox>

    <!-- 下拉框 -->
    <s:select list="{'小学','初中','高中'}" name="college" label="学历"></select>

    <!--文件上传项-->
    <s:file name="file" label="上传文件"></s:file>

    <!--隐藏项-->
    <s:hidden name="hid" value="abcd"></s:hidde>

    <!--文本域-->
    <s:textarea cols="10" rows="10" name="resume" label="简历"></s:textarea>

    <!--提交按钮-->
    <s:submit value="提交"></s:submit>

    <!--重置按钮-->
    <s:reset value="重置"></s:reset>
    </s:form>

  • 相关阅读:
    Datatables 在asp.net mvc中的使用
    nexus离线安装索引及一些问题
    享元模式
    My97DatePicker的使用
    oracle定时器,调用存储过程,定时从n张表中取值新增到本地一张表中
    oracle触发器,一个表新增、修改的同时同步另一张表
    plsql客户端显示菜单等
    telnet测试制定地址端口号
    mybatis新增数据后获取自增主键
    ajax提交表单
  • 原文地址:https://www.cnblogs.com/ZT-SummerRain/p/7076607.html
Copyright © 2011-2022 走看看