struts2学习笔记之十三(表单标签和非表单标签)

表单标签

这些UI标签都可以指定cssClass,cssStyle来指定CSS样式,而且可以指定大量的onXxx属性,用于绑定JS函数

  • form : 表单
  • head :引入一些辅助的css样式单和js脚本
  • hidden :隐藏域
  • label :生成一个标签
  • password : 生成一个密码框
  • select :列表框
  • checkbox : 只是生成一个复选框
  • radio :不是生成一个单选框
  • file :生成一个文件上传域
  • textfield :单行文本域
  • textarea :多行文本域
  • submit :提交按钮
  • reset :重置按钮
  • combobox : 生成一个文本框与列表框的组合
  • token : 防刷新
  • doubleselect :两个列表框的组合,而且还有级联效果(当一个改变时,另一个也会改变)。
  • optiontransferselect :两个updownselect的组合
  • updownselect :增强版的select

实例

head

没有属性指定

<s:head>

查看源代码可以发现在head标签里出现了css和js脚本(如下样式)

<link rel="stylesheet" href="/FormLabel/struts/xhtml/styles.css" type="text/css"/>
<script src="/FormLabel/struts/utils.js" type="text/javascript"></script>

file

<s:file name="image" label="上传头像">

在各种浏览器中的显示样式不同

textarea

label,name,cols,rows

<s:textarea label="备注" name="remark" cols="30" rows="4">

cols和rows只是定义了显示出来的文本域的大小,而不是指定文本域能够输入的字符大小

radio

checkboxlist/radio/select/optgroup非常相似

<%@ taglib prefix= "s" uri="/struts-tags"%>
<!--有一个listXuelis类以及一个Xueli类-->
<s:action var="listXuelis" name="listXuelis"/>
<s:form >
    <s:select label="选择学历"
        name="select"
        list="#listXuelis.xuelis"
        listKey="id"
        listValue="name"
        />
    <s:radio label="选择学历"
        name="radio"
        list="#listXuelis.xuelis"
        listKey="id"
        listValue="name"
        />
    <s:checkboxlist label="选择学历"
        name="checkboxlist"
        list="#listXuelis.xuelis"
        listKey="id"
        listValue="name"
        />
    <s:select label="选择学历"
        name="select"
        list="#listXuelis.xuelis"
        listKey="id"
        listValue="name"
        >
        <s:optgroup label="再次选择"
            list="#listXuelis.xuelis"
            listKey="id"
            listValue="name"
            />
    </s:select>
</s:form>

combobox

<!--所在文件名不能有短划线(-)-->
<s:combobox list="{‘java‘,‘android‘,‘ javaWeb‘,‘J2EE‘,‘J2ME‘,‘J2SE‘}"
    name="book"
    >

</s:combobox>

  使用的过程中,如果单单写<s:combobox list="{‘java‘,‘android‘,‘ javaWeb‘,‘J2EE‘,‘J2ME‘,‘J2SE‘}" name="book" />会出现错误,点击下拉的时候上面的文本框不能改变,所以要包含在<s:form></s:form>

  其次使用的时候,文件名里面不能有短划线(“-”),原因

updownselect

<s:updownselect label="选择学历"
        name="select"
        moveDownLabel="向下"
        moveUpLabel=""
        list="#listXuelis.xuelis"
        listKey="id"
        listValue="name"
        />

optiontransferselect

<s:optiontransferselect label="选择学历"
        name="select"
        moveDownLabel="向下"
        list="#listXuelis.xuelis"
        listKey="id"
        listValue="name"
        doubleList="{‘wuxi‘,‘sdag‘,‘‘er}"
        doubleName="dsag"
        />

doubleselect

<!--所在的form必须有一个action,该值可以是存在或不存在的action name-->
<s:form action="asg">
<s:doubleselect list="{‘西游记‘,‘水浒传‘}"
        doubleList="top==‘西游记‘?{‘sun‘,‘zhu‘,‘tang‘}:{‘lu‘,‘wu‘,‘lin‘}"
        doubleName="renwu"
        label="选择喜欢的任务"
/>
</s:form>
<s:set var="renwu" value="#{‘西游记‘:{‘sun‘,‘zhu‘,‘tang‘},‘水浒‘:{‘lin‘,‘lu‘},‘三国‘:{‘kong‘,‘liu‘}}">
<s:form action="asg">
<s:doubleselect name="asdg"
        list="#renwu.keySet()"
        <!--[]获取Map对应的value,top表示上一个list的选择-->
        doubleList="#renwu[top]"
        doubleName="renwu"
        label="选择喜欢的任务"
/>
</s:form>

token

默认情况下,如果没有进行防刷新控制,每一次刷新都会添加一条完全相同的记录

(1)需要在表单页面上增加s:token

(2)在form对应的Action启用一个拦截器<interceptor-ref name="token"/>,<interceptor-ref name="defaultStack"/>(默认拦截器)

如果action没有指定拦截器,将使用默认的拦截器,而使用了其他拦截器,则需要显示调用默认拦截器

<interceptor-ref name="token"/>会检测用户的刷新,当检测到用户刷新页面时,会返回一个invalid.token的逻辑视图名(因此需要result一个物理视图)

(3)为invalid.token配置一个物理视图资源

<!--此处一个简单的表单页,action省略-->
<s:form action="addUserPro">
    <s:textfiled name="user.name" label="用户名" />
    <s:testfiled name="user.pass" label="密码" />
    <s:submit value="添加" />
</s:form>
<s:form action="addUserPro">
    <s:textfiled name="user.name" label="用户名" />
    <s:testfiled name="user.pass" label="密码" />
    <!--s:token没有属性,就是用来做防刷新-->
    <s:token />
    <s:submit value="添加" />
</s:form>
<table width="400" border="1">
    <s: iterator value="users" var="u">
        <tr>
            <td>${u.id}</td>
            <td>${u.name}</td>
            <td>${u.pass}</td>
        </tr>
    </s:iterator>
</table>

非表单标签

  • actionerror :体现的是struts2的消息机制
  • actionmessage :体现的是struts2的消息机制
  • fielderror :输出类型转换失败、输入校验失败后的错误提示

actionerror/actionmessage

当需要把action中的一段文本,传入下一个页面显示时,就可以借助struts2的消息机制

1)Action中可通过addActionError()或addActionMessage()来添加消息

2)接下来可以在下一个页面中使用<s:actionerror>或<s:actionmessage>输出消息

实例

时间: 2024-12-09 16:50:48

struts2学习笔记之十三(表单标签和非表单标签)的相关文章

struts2学习笔记之十三:自定义过滤器

Struts2的拦截器 1.Struts2的拦截器只能拦截Action,拦截器是AOP的一种思路,可以使我们的系统架构 更松散(耦合度低),可以插拔,容易互换,代码不改变的情况下很容易满足客户需求 其实体现了OCP 2.如何实现拦截器?(整个拦截器体现了责任链模式,Filter也体现了责任链模式) * 继承AbstractInterceptor(体现了缺省适配器模式,建议使用该模式) * 实现Interceptor 3.如果自定了拦截器,缺省拦截器会失效,必须显示引用Struts2默认的拦截器

struts2学习笔记(二)—— 获取登录信息及计算在线人数

实现目的: 1.点击"Login"的超链接,进入登录页面 2.填写登录信息,提交表单,将用户信息保存进Session 3.显示用户名,并计算在线人数 4.点击"Logout"的超链接,在线人数减一,并使Session失效 Struts2实现: 1.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:/

Struts2 学习笔记(概述)

Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并实现应用的功能.通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息.用户信息等:而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等. 封装应用状态:某些应用数据封装起来,使得视图只能通过接口获取对应的数据 响应状态查询:对应用的状态改变进行处理 暴露应用功能:暴露接口 通

struts2 学习笔记

Struts2 学习笔记 在使用J2EE编写网站的时候,我们经常会使用Struts2框架.Struts2的好处就是许多东西已经被封装好了,我们只需要包含给定的jar文件,就能够调用相应的方法和标签.下面我将简要介绍一下Struts2的使用和特点: 一.搭建Struts2的环境:(主要分为三个部分:包含lib文件.web.xml改写.新建一个Struts.xml) 1.打开myeclise软件,新建一个Dynamic web project,在WebContent/WEB-INF文件夹下的lib文

Struts2学习笔记(2)值传递

1.action接收jsp传过来的值: a.定义一个User类   有name  pwd属性,  添加相应的get,set方法   b.<!-- 方式1 普通java类 -->  在UserAction中    添加: private User user;  并添加相应的get,set方法 <!-- 方式2 实现ModelDriven<T>接口-->   在UserAction中   @Override   public User getModel() {    ret

struts2学习笔记(一)—— 知识点扫描

一.struts2的核心部件 (1)Configuration (2)Action (3)Interceptor (4)Value Stack / OGNL (5)Result Types (6)Results / View Technology 二.architectural goals: (1)separation  of concerns (2)loose coupling (3)testability (4)modularization (5)convention over config

struts2学习笔记(4)---------action中的方法调用

系统需要使用Action的不同方法来处理用户请求,这就需要让同一个Action里面包含多个控制处理逻辑. 1)动态方法调用 即DMI(dynamic method invocation),使用actionName!methodName的形式来指定想要调用的方法,如果想使用DMI,需要在struts.xml里面加入这句话: <constant name="struts.enable.DynamicMethodInvocation" value="true" /&

struts2学习笔记(三)—— 在用户注册程序中使用验证框架

实现目标: 1.使用验证框架对用户注册信息进行验证 2.验证用户名.密码.邮箱不能为空 3.验证用户名.密码长度 4.验证邮件地址格式 具体实现 一.Struts2应用的基础配置 这里不做详细阐述,具体为web.xml.相关jar包的配置 二.将页面显示的文本内容放到资源文件中 1.查看用户注册程序中的所有页面,找到所有可以显示的文本内容,将它们分离出来放到资源文件中. 2.与相关的Action类同名,以.preperties为扩展名,与Action类位于同一个包中,只能由该Action访问 R

Struts2学习笔记(OGNL表达式)

Struts2学习笔记(OGNL表达式) Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言: Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python.Ruby和Smarttalk等)的一些起特性: Velocity,严格来说不是表达式语言,它是一种基于Ja