深入分析JavaWeb 49 -- Struts2中常用标签与主题

一、非UI标签

1、property标签

property标签用于输出指定值:

* default:可选属性, 如果需要输出的属性值为null,则显示该属性指定的值

* escape:可选属性,指定是否格式化HTML代码。

* value: 可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值。

2、set标签

set标签用于将某个值放入指定范围。

var:变量的名字,name,id和var表达的含义是一样的,name,id被var替代

scope:指定变量被放置的范围,该属性可以接受application、session、request、 page或action。如果没有设置该属性,则默认放置在值栈的context中。

value:赋给变量的值.如果没有设置该属性,则将ValueStack栈顶的值赋给变量。

<s:set value="#request.username"  var="xxx“ scope=“request” /><br>
<s:property value=“#request.xxx" /><br>

<s:set value="#request.username"  var="xxx" scope="page" /><br>
<s:property value="#attr.xxx" /><br>

<s:set value="#request.username"  var="xxx" /><br>
<s:property value="xxx" /><br>
或者:<s:property value=“#xxx" /><br>

3、push标签

push:将对象放入栈顶,不能放入其他范围,当标签结束,会从栈顶删除。

value:要push到堆栈中的值 。

<s:push value="#request.username">
     <s:property/>
</s:push>
<br>
测试删除: <s:property/>

4、bean标签(了解)

bean标签: 实例化一个符合JavaBeans规范的class,标签体内可以包含几个Param元素,用于调用setter方法给此class的属性赋值.

name:要被实例化的class名字(必须符合JavaBeans规范)

var: 赋给变量的值.放置在request作用域中如果没有设置该属性,则对象被放置到栈顶

<s:bean  name="cn.itcast.bean.Person" var="myperson">
       <s:param name="name" value="%{‘zhang‘}"></s:param>
       <s:param name="age" value="34"></s:param>
</s:bean><br>

<s:property value="#myperson.name"/>

5、action标签

Action:通过指定命名空间和action名称,该标签允许在jsp页面直接调用Action

name:action名字(不包括后缀,如.action)

namespace:action所在命名空间

executeResult:Action的result是否需要被执行,默认值是false不执行

<package name="ognl"   namespace="/ognl" extends="struts-default" >
        <action name="ognlAction_*" class="cn.itcast.ognl.OgnlAction" method="{1}">
           <result name="ognl">/ognl/ongl.jsp?msg=${msgxx}</result>
        </action>
 </package>   

<s:action name="ognlAction_test" namespace="/ognl" executeResult="true" />

6、iterator标签

Iterator:标签用于对集合进行迭代,这里的集合包含List、Set和数组。

value:可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。

var: 可选属性,引用变量的名称.

status:可选属性,该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:

  • int getCount(),返回当前迭代了几个元素。
  • int getIndex(),返回当前迭代元素的索引。
  • boolean isEven(),返回当前被迭代元素的索引是否是偶数
  • boolean isOdd(),返回当前被迭代元素的索引是否是奇数
  • boolean isFirst(),返回当前被迭代元素是否是第一个元素。
  • boolean isLast(),返回当前被迭代元素是否是最后一个元素。
Action类,组织allList集合
for(int i=0;i<10;i++){
    Person p=new Person();
    p.setId(i);
    p.setName("tom"+i);
    p.setAge(20+i);
    allList.add(p);
}
ServletActionContext.getRequest().setAttribute("allList", allList);
   <s:iterator value="#request.allList“ var=“person”>
        <s:property value="name"/><br>
        <s:property value=“#person.name”/>
        <s:property value=“${person.name}”/>

    </s:iterator>

   <s:iterator value="#request.allList" var="person" begin="2" end="7"  step="2">
        <s:property value="#person.name"/><s:property value="#person.age"/><br>
    </s:iterator>

st下的属性在:org.apache.struts2.views.jsp.IteratorStatus类下

<s:iterator value="allList" status="st">
        st.getCount():<s:property value="#st.count"/> &nbsp;&nbsp;
        st.getIndex():<s:property value="#st.index"/>  &nbsp;&nbsp;
        st.isEven():<s:property value="#st.even"/>&nbsp;&nbsp;
        st.isOdd():<s:property value="#st.odd"/>&nbsp;&nbsp;
        st.isFirst:<s:property value="#st.first"/>&nbsp;&nbsp;
        st.isLast():<s:property value="#st.last"/><br>
 </s:iterator>  

   <table border="1">
       <s:iterator value="allList" var="person" status="st">
          <tr class=<s:property value=“#st.even?‘even’:‘odd’”/>  >//可以用EL表达式
             <td><s:property value="#person.name"/></td>
          </tr>
       </s:iterator>
   </table>
<style type="text/css"
   .odd{
           background-color: red;
   .even{
           background-color:blue;}
</style>

7、 if/elseif/else标签

if/elseif/else 基本的流程控制.‘If’标签可单独使用也可以和‘Else If’标签和(或)一个多个‘Else’一起使用

if/elseif/else  基本的流程控制.‘If’标签可单独使用也可以和‘Else If’标签和(或)一个多个‘Else’一起使用
<s:if test="#age==23">
    23
</s:if>
<s:elseif test="#age==21">
    21
</s:elseif>
<s:else>
    都不等
</s:else>
<table border="1">
       <s:iterator value="allList" var="person">
          <tr>
             <td><s:property value="#person.name"/></td>
             <td><s:property value="#person.age"/></td>
             <td><s:if test="#person.age<24">少年</s:if>
                 <s:elseif test="#person.age<26">中年</s:elseif>
                 <s:else>老年</s:else>
             </td>
          </tr>
       </s:iterator>
   </table>

8、 url标签

url:该标签用于创建url,可以通过”param”标签提供request参数.

value:如果不提供就用当前action,使用value后缀必须加.action

action:用来生成url的action,如果没有则使用value

namespace :命名空间

var:引用变量的名称.

    使用action<br>
    <s:url action="ognlTagAction_test" namespace="/ognl" var="myurl">
         <s:param name="name" value="%{‘张老师‘}"></s:param>
         <s:param name="id" value="12"></s:param>
    </s:url>
    注意:当使用url时,应配合使用struts2的a标签
    <s:a href="%{#url}" >xxxx</s:a><br>
    使用value<br>
    <s:url value="ognlTagAction_test.action" namespace="/ognl" var="myurl">
         <s:param name="id" value="12"></s:param>
         <s:param name="cnname" value="%{‘zhang‘}"></s:param>
    </s:url>
    <s:a href="%{#myurl}" >xxxx</s:a><br>
比较:<a href=“<s:property value=‘%{#myurl}’/>”>链接</a><br>的不同

具体实例全部展现

<%@page import="org.apache.struts2.ServletActionContext"%>
<%@page import="com.opensymphony.xwork2.ActionContext"%>
<%@page import="com.opensymphony.xwork2.util.ValueStack"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Struts2中的通用标签</title>
    <style type="text/css">
        .odd{
            background-color: #c3f3c3;
        }
        .even{
            background-color: #f3c3f3;
        }
    </style>
  </head>

  <body>
    <br/>----------------s:property(重点)------------------<br/>
    <s:property/><br/><!-- 什么都不写,输出的是栈顶对象 -->
    <s:property value="username"/><br/><!-- 从栈顶开始搜索属性username -->
    <s:property value="[0]"/><br/><!-- 输出根栈中的所有元素 -->
    <s:property value="[1]"/><br/><!-- 输出根栈中的除栈顶的所有元素 -->
    <s:property value="[0].top"/><br/><!-- 输出根栈中的除栈顶的所有元素 -->
    <hr/>
    <s:property value="gender"/><br/><!-- 内部原理:调用的是ValueStack的findValue方法 -->
    <s:property value="#gender"/><br/>
    <hr/>
    <s:property value="#grade" default="木有"/><br/>
    <!-- 其余和JSTL中的c:out是一样 -->
    <s:property value="‘<hr/>‘" default="木有"/><br/>
    <br/>----------------s:set------------------<br/>
    <s:set value="username" var="name"></s:set>
    <s:set value="username" var="name" scope="session"></s:set>
    <s:set value="‘安康‘" var="ppp" scope="action"></s:set><!-- 如果范围为action,第一放到了request请求范围中,第二放到了contextMap中 -->

    <s:property value="#request.ppp"/>
    <br/>----------------s:push把对象压入栈顶,接着弹栈.要想看:需要把s:debug放入标签内部------------------<br/>
    <s:push value="‘abcdefg‘">
    </s:push>
    <br/>----------------s:bean------------------<br/>
    <!--
    该标签设计有些不友好:
        name:指定要实例化的JavaBean的类全名。如果是class就好了。
        var:指定的话,放到contextMap和request范围中
            不指定的话,放入栈顶,遇到结束标签,弹栈
     -->
    <s:bean name="java.util.Date"></s:bean>
    <%
    Enumeration e = request.getAttributeNames();
    while(e.hasMoreElements()){
        String name = (String)e.nextElement();
        out.write(name+"="+request.getAttribute(name)+"<br/>");
    }
     %>
     <hr/>
     <!-- s:action会把另外一个动作的结果包含到当前页面中。 -->
     <s:action name="action2" executeResult="true"></s:action>
     <br/>----------------s:iterator迭代(重点)------------------<br/>
     <s:property value="ps"/>
     <hr/>
     <table border="1">
        <tr>
            <th>姓名</th>
            <th>性别</th>
            <th>薪水</th>
        </tr>
        <!-- 指定var:就相当于把当前遍历对象存到了contextMap中(建议) -->
         <s:iterator value="ps" var="p">
            <tr>
                <td>${p.nickname}</td>
                <td><s:property value="#p.gender"/></td>
                <td>${p.salary}</td>
            </tr>
         </s:iterator>
     </table>
      <hr/>
     <table border="1">
        <tr>
            <th>姓名</th>
            <th>性别</th>
            <th>薪水</th>
        </tr>
        <!-- 不指定var:就相当于把当前遍历对象压入了根栈的栈顶 -->
         <s:iterator value="ps">
            <tr>
                <td>${nickname}</td>
                <td><s:property value="gender"/></td>
                <td>${salary}</td>
            </tr>

         </s:iterator>
     </table>
     <hr/>
     <table border="1">
        <tr>
            <th>姓名</th>
            <th>性别</th>
            <th>薪水</th>
        </tr>
        <!-- 指定var:就相当于把当前遍历对象存到了contextMap中(建议)
            status:指向一个对象,记录着当前遍历元素的一些属性。他有以下属性(放到了contextMap中)
                int getCount
                int getIndex
                boolean isEven
                boolean isOdd==getOdd
                boolean isFirst
                boolean isLast
        -->
         <s:iterator value="ps" var="p" status="s">
            <tr class="<s:property value="#s.odd?‘odd‘:‘even‘"/>">
                <td>${p.nickname}</td>
                <td><s:property value="#p.gender"/></td>
                <td>${p.salary}</td>
            </tr>
         </s:iterator>
     </table>
      <hr/>
       <br/>----------------s:if else if(重点)------------------<br/>
    <s:set value="‘C‘" var="grade"></s:set>
    <s:if test="#grade==‘A‘">
        优秀
    </s:if>
    <s:elseif test="#grade==‘B‘">
        良好
    </s:elseif>
    <s:else>
        尚需努力
    </s:else>
    <hr/>

    <!-- s:param的value取值是一个OGNL表达式 -->
    <s:url action="action2" var="url">
        <s:param name="username" value="‘哦也‘"></s:param>
        <s:param name="password" value="123"></s:param>
    </s:url>
    <a href="<s:property value=‘#url‘/>">猛点</a>
    <s:debug></s:debug>
  </body>
</html>

二、UI标签

表单标签将在 HTML 文档里被呈现为一个表单元素

使用表单标签的优点:

  • 表单回显
  • 对页面进行布局和排版

    标签的属性可以被赋值为一个静态的值或一个 OGNL 表达式. 如果在赋值时使用了一个 OGNL 表达式并把它用 %{} 括起来, 这个表达式将会被求值.

表单标签的共同属性

主要的一些标签是form 标签、textfield, password, hidden 标签、submit 标签、reset 标签

、label 标签、textarea 标签、checkbox 标签、checkboxlist 标签、radio 标签、select 标签。具体应用可以参见API文档, 这里以一个具体的实例全部展现出来

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>UI标签的使用</title>
    <s:head/>
    <style type="text/css">
        .errorMessage{
            list-style-type: none;
            color: blue;
        }
    </style>
  </head>

  <body>
    <hr/>
    <s:form action="regist" namespace="/student">
        <s:token/>
        <s:textfield name="username" label="用户名" requiredLabel="true"/>
        <s:password name="password" label="密码" requiredLabel="true"/>
        <s:textfield name="birthday" label="出生日期"></s:textfield><s:fielderror fieldName="birthday"></s:fielderror>
        <s:textarea name="description" label="简介" rows="3" cols="38"></s:textarea>
        <s:checkbox name="married" label="已婚"></s:checkbox>
        <s:radio name="gender" list="#{‘male‘:‘男性‘,‘female‘:‘女性‘}" label="性别" value="{‘male‘}"></s:radio>
        <s:checkboxlist name="hobby" list="#{‘eat‘:‘吃饭‘,‘sleep‘:‘睡觉‘,‘java‘:‘学Java‘}" label="爱好" value="{‘java‘,‘eat‘}"></s:checkboxlist>
        <s:select name="province" list="#{‘BJ‘:‘北京‘,‘SD‘:‘山东省‘}" label="省份" value="{‘SD‘}"></s:select>
        <s:submit align="center" value="保存"></s:submit>
    </s:form>
    <s:debug></s:debug>
  </body>
</html>

三、主题

主题: 为了让所有的 UI 标签能够产生同样的视觉效果而归集到一起的一组模板. 即风格相近的模板被打包为一个主题

1、simple: 把 UI 标签翻译成最简单的 HTML 对应元素, 而且会忽视行标属性

2、xhtml: xhtml 是默认的主题. 这个主题的模板通过使用一个布局表格提供了一种自动化的排版机制.(默认值)

3、css_xhtml: 这个主题里的模板与 xhtml 主题里的模板很相似, 但它们将使用 css 来进行布局和排版

4、ajax: 这个主题里的模板以 xhtml 主题里德模板为基础, 但增加了一些 Ajax 功能.

1、修改主题:

    A、通过 UI 标签的 theme属性(只适用于当前的标签)
  <s:textfield name="username"  label="用户名" theme="simple"></s:textfield>

B、在一个表单里, 若没有给出某个 UI 标签的 theme 属性, 它将使用这个表单的主题

(适用于整个form标签)

 <s:form  action="" method="post" namespace="/ui"  theme="simple">

C、修改 struts.properties 文件中的 struts.ui.theme 属性. (适用整个环境)

<!-- 设置ui标签的主题 -->
<constant name="struts.ui.theme" value="simple"></constant>

优先级:A>B>C

2、struts2标签自动回显

时间: 2024-08-04 15:41:36

深入分析JavaWeb 49 -- Struts2中常用标签与主题的相关文章

深入分析JavaWeb Item49 -- Struts2中常用标签与主题

一.非UI标签 1.property标签 property标签用于输出指定值: * default:可选属性, 如果需要输出的属性值为null,则显示该属性指定的值 * escape:可选属性,指定是否格式化HTML代码. * value: 可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值. 2.set标签 set标签用于将某个值放入指定范围. var:变量的名字,name,id和var表达的含义是一样的,name,id被var替代 scope:指定变量

深入分析JavaWeb 48 -- Struts2中OGNL表达式与ValueStack

一.OGNL表达式 1.OGNL表达式介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式语言. OGNL相对其它表达式语言具有下面几大优势: 1.支持对象方法调用,如xxx.doSomeSpecial(): 2.支持类静态的方法调用和值访问,表达式的格式: @[类全名(包括包路径)]@[方法名 | 值名],例如:@[email protected]('foo %s', '

Struts2页面开发中常用标签使用说明

1. Struts2页面开发中常用标签使用说明 1.1.往action里传值的使用方式: <input name="userName" type="text" class="input6" size="15"> a. userName属性需要在访问的action中提供相应的属性,并有SET/GET方法. b. 可以不在访问的action中提供相应的属性,用request. getParameter_r(“userN

Struts2中UI标签之表单标签介绍

1.在Struts2中UI标签的表单标签分为两种:form标签本身和单个表单标签. 2.Struts2表单标签包括:form.textfield.password.radio.checkbox.checkboxlist.select.doubleselect.combobox.optiontransferselect.optgroup.updownselect.textarea.hidden.file.label.submit.token.head.datepicker.reset.richte

Struts2中datetimepicker标签

在以前的struts2版本中s:datetimepicker只需要在head标签处设置<s:head theme="ajax"/>,就可以直接使用s:datetimepicker的标签了.而在2.1.6版本中不能直接这样使用了,将datetimepicker移除了.原因是此标签调用了dojo的datetimepicker的库.所以现在使用的时候首先要导入一个库:struts2-dojo-plugin-2.1.6.jar.然后还要设置dojo的taglib<%@ tag

Struts2中UI标签之表单标签的一个例子

1.最近写了一篇文章,介绍了一下Struts2中UI标签的表单标签,文章地址为:http://blog.csdn.net/u012561176/article/details/44986183  因为缺少了个例子,大家看文字和表格也看不出什么效果来,所以今天来介绍一个例子,用Struts2中UI标签的表单标签实现一个个人信息的表单,但是有些表单标签没有演示出来,大家可以根据我介绍UI标签的表单标签来进行学习,这里只是给个例子. 2.首先新建一个Struts2项目,项目名为PersonMess

struts2中ognl标签详解

<body> <s:set name="age" value="61" /> <!-- if elseif else 参数test:决定标志里的内容是否显示的表达式,类型boolean 注:else标志没有这个参数 --> <h3>if语句</h3> <s:if test="{age>60}"> 老年人 </s:if> <s:elseif test=&

深入分析JavaWeb 43 -- Struts2开发入门

一.Struts2概述 1.Struts2是什么? Struts2是一个M(模型-域–范围模型)V(View视图)C(控制器)框架(模型2).框架都是一个半成品.提高开发效率. Struts1是一个MVC框架,非常流行.有很大的缺点.此时一个webwork的框架设计超前,名气不是很大.Struts1+webworkd=struts2.用的是struts1的名字,但是与sruts1没啥关系,struts2的核心是webwork框架. 2.Struts2能干什么? web开发Strust2 核心功能

JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% request.setCharacterEncoding("UTF-8"); %> <jsp:forward page="/index.jsp"> <jsp:param value="张三" name="userName&q