Struts2 笔记 2

Struts2中定义一组新的标签库,使用struts的标签库和JSTL类似。
Struts2标签需要结合OGNL表达式一起使用,注意Struts2中对EL支持不太好。
使用Struts标签库需要先导库:

<%@ taglib prefix="s" uri="/struts-tags" %>

1.通用标签

<s:property value=""/>

property标签可以输出对象栈中对象的属性,或者map栈中的对象,value属性中的值,会被OGNL解析

例子:

<!--s:property可以直接获取到对象栈中对象的属性 -->
        <s:property value="username"/>

        <!-- property可以获取到Map栈中的对象 -->
        <s:property value="#session.username"/>

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

        <!-- parameters的结构map<String,String[]> 一般我们在使用parameters都需要加索引 -->
        <s:property value="#parameters.age[1]"/>

        <!-- attr会从由小到大的属性从域中获取到属性:page request、值栈、session、application -->
        <!-- map栈中常用的对象 request session application parameters attr -->
        <s:property value="#attr.username"/>


    <s:url value="" var=""></s:url>

可以用来生成一个完整URL地址,
value 指向要生成的地址,当我们的地址值以/开头,他会自动为路径加上项目名
同时它也可以自动进行URL重写

var 我们可以将生成的地址保存到域中,var来指定保存的名字。

例子:

<!--s:url标签用来创建一个完整的URL地址 -->
            <!-- 也可以将url放入到域中,通过var属性来指定属性名,然后就可以通过EL表达式使用URL地址 -->
            <s:url value="/index.jsp" var="url"></s:url>
            ${url }

            <br /> <br />
            <!-- action可以指定要访问的目标action的name , namespace可以用来指定action的命名空间 -->
            <s:url action="user_add" namespace="/atguigu" var="url2"></s:url>
            ${url2 }

            <br /> <br />
            <!-- 还可以通过s:param标签来为地址指定请求参数 -->
            <!-- param标签name属性指定属性的名字,value属性用来指定属性的值 -->
            <!-- value属性会自动被OGNL解析 ,如果value属性没有解析到属性值,则请求参数不会在地址中添加 -->
            <!-- 如果value属性值为数字,则不会进行OGNL解析 -->
            <!-- 如果不希望value属性被ognl解析,则直接给属性值加上一个单引号 -->
            <s:url action="user_add" namespace="/atguigu" var="url2">
                <s:param name="username" value="username"></s:param>
                <s:param name="age" value="18"></s:param>
                <s:param name="gender" value="'male'"></s:param>
            </s:url> 
            ${url2 }


    <s:set value="" var="" scope="" ></s:set>
        set标签可以向域中添加一个属性,
            value 指向属性的值,value的值会被OGNL解析
            var 属性的名字
            scope 属性将会被翻入到哪个域中

    <!-- 可以在标签开始时将一个对象直接压入值栈的栈顶,然后在标签结束时,将对象从栈顶移除 -->
    <s:push value="#request.user">
        ${username}
    </s:push>


    <!-- if elseif else -->
    <s:if test="#parameters.age[0]<14">
        <h3>你还是个小毛孩!</h3>
    </s:if>
    <s:elseif test="#parameters.age[0]<30">
        <h3>你是一个精壮的汉子!</h3>
    </s:elseif>
    <s:else>
        <h3>你已经是个老家伙了!</h3>
    </s:else>

    <!-- s:iterator可以用来遍历一组集合 -->
    <!-- iterator标签会将集合中的每个元素,分别放入值栈的栈顶 -->
    <!-- status可以用来获取当前遍历的状态 -->
    <s:iterator value="#request.cities" status="st">
        ${st.even} --${st.index} --${st.count } -- ${id } - ${name } <br />
    </s:iterator>

iterator标签用来遍历一个集合,value属性指向的一个集合,它会被ONGL解析
iterator标签会将集合中的每个元素,分别放入值栈的栈顶,我们可以直接通过属性名来读取集合
status属性可以获取到一个遍历状态的对象
even 是否是一个偶数行
odd 是否是一个奇数行
index 获取当前元素的索引
count 获取当前元素的数量

<!-- sort标签可以用来给一个集合进行排序 -->
    <!-- comparator指定排序的类,source指定被排序的集合 var指定新集合的名字 -->
    <s:sort comparator="#request.cc" source="#request.cities" var="cities2"></s:sort>

注意:新的集合将会被放入到page域中

<!-- a标签可以用来生成一个超链接,和HTML里a一个意思 -->
    <s:a href="test">超链接1</s:a>

    <br /> <br />
    <s:a action="user_update" namespace="/atguigu">超链接1</s:a>

2.表单标签

<!-- s:form标签用来创建一个表单,作用和html里的form类似 -->
    <!-- form标签会自动为action指向的路径加上项目名,同时默认请求方式就是post,不用手动指定 -->
    <!-- 表单标签,可以自动回显 , 可以自动从值栈获取到和name属性值相同的属性的值,并在表单中回显-->
    <s:form action="/testForm">
        <!-- 表单隐藏域 -->
        <s:hidden name="id"></s:hidden>

        <!-- s:textfield用于创建一个表单文本框,name属性和表单项的name属性一样,label是表单项前边的提示文字 -->
        <s:textfield name="username" label="用户名"></s:textfield>

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

        <!-- 你最喜欢的城市 -->
        <!-- 可以为单选按钮设置一个list,list指向一个List集合或Map集合 -->
        <!-- 如果是list集合,则默认使用集合的对象作为表单的value属性,和显示的文字 -->
        <!-- 如果我们希望手动指定表单的value和显示的文字 则需要指定listKey和listValue listKey指定value属性 listValue指定显示的文字 -->
        <s:radio name="city" list="#request.cities" label="你最喜欢的城市" listKey="id" listValue="name"></s:radio>

        <!-- 可以通过OGNL手动创建一个List 形式如下 {'male','female'} -->
        <!-- 可以手动创建一个Map,那么map的key将会作为标签的value属性,而map的值,将会作为标签提示文字 -->
        <s:radio label="性别" name="gender" list="#{'male':'男','female':'女'}"></s:radio>

        <!-- s:checkboxlist用来创建一组多选框 -->
        <s:checkboxlist label="爱好" name="hobby" list="#{'ppq':'乒乓球','lq':'篮球','ymq':'羽毛球' }"></s:checkboxlist>

        <!-- s:select可以用来创建一个下拉列表 -->
        <!-- headerValue可以指定默认值,headerKey指定默认值的value属性 -->
        <s:select headerKey="" headerValue="请选择..." label="你最喜欢的明星" name="star" list="#{'fbb':'范冰冰','cls':'苍老师','tw':'汤唯' }">
            <!--s:optgroup 可以对下拉框中的选项进行分组 -->
            <s:optgroup label="女明星" list="#{'fbb':'范冰冰','cls':'苍老师','tw':'汤唯' }"></s:optgroup>
            <s:optgroup label="男明星" list="#{'wyz':'吴彦祖','ldh':'刘德华','pcj':'潘长江' }"></s:optgroup>
        </s:select>

        <s:textarea name="desc" label="自我介绍"></s:textarea>

        <!-- 当只需要上传一个boolean类型的值,这个值要不是true,要不是false,这时我们就是用 s:checkbox-->
        <!-- 这个标签,当你勾选时会发送一个true作为参数,当你没勾选时会传一个false -->
        <s:checkbox name="agree" label="是否同意网站协议"></s:checkbox>

        <s:submit value="注册"></s:submit>
    </s:form>

3.CRUD练习

查:
从数据库中加载员工信息并在页面中进行显示
emp_list

流程:
在index.jsp点击一个超链接emp_list,然后在页面中显示出类全部的员工信息
用户 –> emp_list –> Dao

删除:
根据员工的id删除员工信息
emp_del

添加:
向数据库中添加一个员工信息
emp_add

修改:
修改数据库中的一个员工信息
- 修改先查找要修改的员工的信息
emp_input
- 然后在修改员工信息
emp_update

1.创建一个Employee类
        Integer id
        String name
        Integer age
        String dept
        String role

2.创建一个DAO,在DAO模拟数据库查询

3.创建UserAction,处理CRUD。

你可能感兴趣的:(笔记,struts2.0)