zoukankan      html  css  js  c++  java
  • 【基于初学者的SSH】struts2 值栈的详解与struts2标签库+ognl表达式

    一:什么是值栈:struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值

     特点:先进后出,最上面的元素叫做栈顶,也叫压栈。

     <s:debug></s:debug>可以看到栈的元素,栈的结构为root和context,root返回的结构是list集合,context返回的是map集合

    二:action和servlet区别:

    每次访问的action的时候,都会创建一个新的action对象,而servlet只会创建一个对象

    注意:每次访问action都会创建一个action对象,action对象里面都且只有一个值栈的对象

    三:值栈的对象:

    ActionContext ac=ActionContext.getContext();

    ValueStack v1=ac.getValueStack();

    不常用,通常都是使用ognl表达式来取值,下面来讲几种实例,在此之前要先在jsp中导入标签库<%@ taglib prefix="s" uri="/struts-tags"%>

    三:向值栈里面保存变量并取值

    01):保存变量

    private String name;

    public String getName() {
    return name;
    }

    @Override

    public String execute() throws Exception {

    name = "张三";

    }

    02):取值

    <s:property value="name" />

    四:向值栈里面保存对象并取值:

    01):创建preson的类,实例化,得到get的方法

    private Person person = new Person();

    public Person getPerson() {
    return person;
    }

    @Override

    public String execute() throws Exception {

    person.setName("张安");
    person.setAge(1);
    person.setSex("女");

    }

    02):取值(对象名.属性名):

    <s:property value="person.name" />
    <s:property value="person.age" />
    <s:property value="person.sex" />

    五:向值栈里保存集合并取值

    01):实例化一个list集合

    private List<Person> lp = new ArrayList<Person>();

    public List<Person> getLp() {
    return lp;
    }

    @Override

    public String execute() throws Exception {

    lp.add(new Person("李四",1,"男"));
    lp.add(new Person("王五",2,"女"));

    }

    02):取值

        <!-- 取集合的值01 -->
        <s:property value="lp[0].name" />
        <s:property value="lp[1].name" />
        <br>
        <!-- 取集合的值02 -->
        <s:iterator value="lp">
            <s:property value="name" />
            <s:property value="age" />
            <s:property value="sex" />
            <br>
        </s:iterator>
        <!-- 取集合的值03 加了var属性后就是从context里面取值,所以要加#号 -->
        <s:iterator value="lp" var="l">
            <s:property value="#l.name" />
            <s:property value="#l.age" />
            <s:property value="#l.sex" />
        </s:iterator>

    六:向值栈里添加域对象的值

    01):向值栈里面添加

    @Override

    public String execute() throws Exception {

    //域对象
    HttpServletRequest request=ServletActionContext.getRequest();
    request.setAttribute("abc", "域对象的值");
    return SUCCESS;

    }

    02):取值

    <s:property value="#request.abc" />

    七:在form标签里面使用属性值:

    <s:textfield  name="text"  value="%{name}"></s:textfield>(使用%{}就可以转)

    八:form标签:

    <!-- from标签 -->
    <s:form action="" method="post">
    <!-- 相当于text 文本框 -->
    <s:textfield></s:textfield>
    <!-- 密码框 -->
    <s:password></s:password>
    <!-- 单选框 必须有name属性值 -->
    <s:radio list="#{'1':'男','2':'女'}" value="1" name=""></s:radio>
    <!-- 多选框,name属性必须要 -->
    <s:checkboxlist list="#{'1':'皮皮虾','2':'糖醋鱼','3':'炒年糕'}" value="1" name=""></s:checkboxlist>
    <!-- 下拉框,用combox的话就会带一个文本框绑定value值 -->
    <s:select list="#{'1':'皮皮虾','2':'糖醋鱼','3':'炒年糕'}" ></s:select>
    <!-- 提交 -->
    <s:submit></s:submit>
    <!-- 重置 -->
    <s:reset></s:reset>
    </s:form>

    效果图:

  • 相关阅读:
    JNI内存使用问题(转载)
    typearray和obtainStyledAttribute的作用
    handler looper代码总结(原创)精品推荐
    Appium和Robotium在文字输入上的区别
    老李分享:robotium3.6与4.0 later 的区别 2
    老李分享:robotium3.6与4.0 later 的区别 1
    老李分享:robotium常用API 2
    老李分享:robotium常用API 1
    老李分享:Android -自动化埋点 3
    老李分享:Android -自动化埋点 2
  • 原文地址:https://www.cnblogs.com/hxbhdljmyz/p/7674308.html
Copyright © 2011-2022 走看看