Struts2的标签之UI标签

时间:2022-05-18 04:42:38

1:UI标签分为分为以下几种:
      *Form Tags:表单标签,包含所有可以用在Form表单里面的标签
       *Non-Form UI Tags:非表单标签,主要包含错误展示,组件等。
       *Ajax Tags:用来支持Ajax的标签。
 
2:模板和主题
     *模板(Template)
       就是一些代码,在Struts2中是由FreeMarker来编写的,标签使用这些代码能渲染生成相应的HTML代码
      一个标签需要知道自己显示什么数据,以及最终生成什么样的HTML代码,其中,显示什么数据往往是通过用户指定的OGNL表达式去值栈取,而最终生成什么样的HTML代码,就是由一组FreeMarker的模板来定义,每个标签都会有自己对应的FreeMarker模板,这组模板在Struts2核心jar包的template包中。


     *主题(Theme)
       就是一系列模板的集合。通常情况下,这一系列模板会有相同或者类似的风格,这样能保证功能或者视觉效果的一致性。
       Strut2标签是使用一个模板来生成最终的HTML代码,这也意味着,如果使用不同的模板,那么同一个标签所生成的HTML代码并不一样,也意味着不同的标签所生成的HTML代码的风格也可能不一样。
      每一个主题包含一系列的模板,这些模板就会有相同或者类似的风格,从而解决上面的问题,这也意味着,在Struts2中,可以通过切换主题来切换标签的HTML风格。
 
      *Struts2的内建主题:
          *simple:只生成最基本的HTML元素,没有任何附加功能。
          *xhtml:在simple的基础上提供附加功能,提供布局功能,Label显示名称,以及验证框架和国际化框架的集成。
          *css_html: 在xhtml的基础上,添加对CSS的支持和控制。
         *Ajax:继承自xhtml, 提供Ajax的支持。
       其中,xhtml为默认的主题,但是,xhtml主题有一定的局限性,因为它使用表格进行布局,只支持每一行放一个表单项,这样一来,要是有复杂的页面布局,不好弄了。
 修改默认的主题:
      在struts.xml中,<constant name="struts.ui.theme" value="simple" />
     在struts.properties中,struts.ui.theme = simple


3:表单标签的通用属性
    *与css相关的属性
        cssClass, cssStyle, cssErrorClass, cssErrorStyle
    *与触发事件相关的属性
      onblur, onchange, onclick, ondbclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup,
     onselect
    *与悬浮提示相关的属性
     jsTooltipEnabled: 是否允许用javascript来生成悬浮提示
     tooltip:悬浮提示的内容
      tooltipDelay:悬浮提示出现的延迟时间,以ms为单位
     tooltipIcon:悬浮提示使用图标的URL路径
   
    *其他来源于HTML的属性
    accesskey:指定快捷键,如果设置这个属性为x,按Alt+xz组合键就可以快速定位到这个生成的HTML组件
    disabled, id, tabindex, title
    
    *与提示文本相关的属性
     label:用来显示在HTML组件前的文本
     key:同label一样,也是用来显示在HTML组件前的文本,但是其内容取自国际化信息
     labelposition:标签文本显示的位置,可以选择top或者left


    *与模板和主题相关的属性
    template, templateDir, theme
    *是否为必填的属性
    required:指定此生成的HTML组件是否为必填项
   requiredposition:指定此生成的HTML组件是必填项时提示信息显示的位置,可以是left或者right
4:Struts2标签和一般的HTML表单便签的不同
   * 
  <form action="/helloworld/ognlAction.action" method="post"></form>
    <s:form action="/ognlAction.action" method="post"></s:form>
     <s:form action="/ognlAction.action" method="post" namespace="/testNamespace"></s:form>
<s:form>的action属性不用带应用上下文,如/helloworld, 可以使用namespace属性来指定使用到的命名空间。
 *
<textarea>默认值</textarea>
  <s:textarea value="默认值"/>
     
指定默认值的方式不一样


*单选框radio
     常见的属性:
           list:用于生成单选框的集合,必须配置
           listKey: 生成的radio的value属性
           listValue: 生成的radio后面显示的文字
     
   简单示例:

        Action的内容

        

private List<User> userList = new ArrayList();

public List<User> getUserList() {
return userList;
}

public void setUserList(List<User> userList) {
this.userList = userList;
}

public String execute() {

User user1 = new User();
user1.setName("zhangsan");
user1.setAge(20);

User user2 = new User();
user2.setName("lisi");
user2.setAge(22);

userList.add(user2);
userList.add(user1);

return SUCCESS;
}

页面jsp的内容:

    

  <s:radio name="radio1" list="userList" listKey="name" listValue="age"/>

输出结果:

   Struts2的标签之UI标签


 

*复选框checkboxlist:

   *action的内容

       

private List<User> userList = new ArrayList();

public String[] getCheckbox1() {
String[] checkbox1 = new String[2];
checkbox1[0] = "zhangsan";
checkbox1[1] = "lisi";
return checkbox1;
}

public List<User> getUserList() {
return userList;
}

public void setUserList(List<User> userList) {
this.userList = userList;
}

public String execute() {

User user1 = new User();
user1.setName("zhangsan");
user1.setAge(20);

User user2 = new User();
user2.setName("lisi");
user2.setAge(22);

User user3 = new User();
user3.setName("wangwu");
user3.setAge(30);

userList.add(user2);
userList.add(user1);
userList.add(user3);

return SUCCESS;
}

*页面jsp的内容:

   

 <s:checkboxlist name="checkbox1" list="userList"  listKey="name" listValue="age"></s:checkboxlist>

*输出结果:

  Struts2的标签之UI标签

     通过action的getCheckbox1方法为checkbox赋值


*下拉框

属性:list,listKey,listValue

headerKey: 在所有的选项前再添加额外的一个选项作为其标题的value属性

headerValue: 在所有的选项前再添加额外的一个选项作为其标题的显示文字

emptyOption: 是否在标题和真实的选项之间加一个空选项

multiple: 用户是否可以同时选择多项

size:下拉框的高度,即最多可以同时显示多少个选项

简单示例:

action的内容:

private List<User> userList = new ArrayList();

public String[] getSelect1() {
String[] select1 = new String[2];
select1[0] = "zhangsan";
select1[1] = "lisi";
return select1;
}

public List<User> getUserList() {
return userList;
}

public void setUserList(List<User> userList) {
this.userList = userList;
}

public String execute() {

User user1 = new User();
user1.setName("zhangsan");
user1.setAge(20);

User user2 = new User();
user2.setName("lisi");
user2.setAge(22);

User user3 = new User();
user3.setName("wangwu");
user3.setAge(30);

userList.add(user2);
userList.add(user1);
userList.add(user3);

return SUCCESS;
}

页面jsp的内容:

 <s:select name="select1" list="userList" listKey="name" listValue="age" multiple="true" size="5"></s:select>

输出结果:

Struts2的标签之UI标签


5:复杂操作标签

*head标签

仅仅把head标签放到页面内,没有任何的参数,它可以自动识别页面需要的Struts2的哪些辅助性文件,并帮助用户自动导入,比如某些Struts2的标签需要使用Struts2提供的某些js文件,那么head标签就可以自动发现并导入这些js文件

<s:head>

*combobox标签

combobox标签用于生成一个文本框和一个下拉框,下拉框出现在文本框的下面,在最终提高的时候只提交文本框的输入值,下拉框用于在其选项改变时,也就是onchange事件被触发时,把自身的被选中项的值赋到文本框上

与文本框有关的属性: maxlength size readonly

与下拉框有关的属性:list, listKey, listValue

简单示例:

private List<User> userList = new ArrayList();

public Integer[] getSelect1() {
Integer[] select1 = new Integer[1];
select1[0] = 20;
return select1;
}

public List<User> getUserList() {
return userList;
}

public void setUserList(List<User> userList) {
this.userList = userList;
}

public String execute() {

User user1 = new User();
user1.setName("zhangsan");
user1.setAge(20);

User user2 = new User();
user2.setName("lisi");
user2.setAge(22);

User user3 = new User();
user3.setName("wangwu");
user3.setAge(30);

userList.add(user2);
userList.add(user1);
userList.add(user3);

return SUCCESS;
}

页面内容:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>comboboxlist用法</title>
<s:head/>
</head>
<body>
<s:form action="" method="post" theme="simple">

<s:combobox name="select1" list="userList" listKey="age" listValue="name" size="20">
</s:combobox>

</s:form>
</body>
</html>

注意要引用<s:head>标签


输出效果图:

Struts2的标签之UI标签


*uploadselect标签

*生成一个可以*上下移动选项的下拉框。

*allowMoveUp: 是否显示“上移”按钮,默认为显示

allowMovoDown: 是否显示“下移”按钮,默认为显示

allowSelectAll: 是否显示“全选”按钮,默认为显示

moveUpLabel: 上移按钮显示的文本

moveDownLabel: 下移按钮显示的文本

selectAllLabel: 全选按钮显示的文本


简单示例:

action的内容:

private List<User> userList = new ArrayList();

public Integer[] getSelect1() {
Integer[] select1 = new Integer[1];
select1[0] = 20;
return select1;
}

public List<User> getUserList() {
return userList;
}

public void setUserList(List<User> userList) {
this.userList = userList;
}

public String execute() {

User user1 = new User();
user1.setName("zhangsan");
user1.setAge(20);

User user2 = new User();
user2.setName("lisi");
user2.setAge(22);

User user3 = new User();
user3.setName("wangwu");
user3.setAge(30);

userList.add(user2);
userList.add(user1);
userList.add(user3);

return SUCCESS;
}

页面jsp的内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>updownselect用法</title>
<s:head/>
</head>
<body>
<s:form action="" method="post" theme="simple">
<s:updownselect list="userList" name="select1" listKey="age" listValue="name"
allowMoveUp="true" moveUpLabel="上移" allowMoveDown="true" allowSelectAll="true"
moveDownLabel="下移" selectAllLabel="全选" />
</s:form>
</body>
</html>

输出效果如下图:

Struts2的标签之UI标签


*optiontransferselect标签

它用来生成两个下拉框,这两个下拉框左右放置,有按钮可以控制将选项在两个下拉框之间转移,在每个下拉框还有按钮可以像updownselect标签那样控制选项上下移动


主要属性可以分为四组:

*控制左下拉框名字以及数据来源

*name, list, listKey, listValue, headerKey, headerValue

*控制右下拉框名字以及数据源

*doubleName, doubleList, doubleListKey, doubleListValue, doubleHeaderKey, doubleHeaderValue

*控制两个下拉框之间的左右移动按钮

*allowAddAllToLeft, allowAddToLeft, allowAddToRight, allowAddAllToRight, addAllToLeftLabel, addAllToRightLabel, addToLeftLabel, addToRightLabel

*控制两个下拉框之间的上下移按钮

*allowUpDownOnLeft, allowUpDownOnRight, leftDownLabel, leftUpLabel, rightUpLabel, rightDownLabel, allowSelectAll


简单示例:

  action内容:

 

private List<User> userList = new ArrayList();

public Integer[] getSelect1() {
Integer[] select1 = new Integer[1];
select1[0] = 20;
return select1;
}

public List<User> getUserList() {
return userList;
}

public void setUserList(List<User> userList) {
this.userList = userList;
}

public String execute() {

User user1 = new User();
user1.setName("zhangsan");
user1.setAge(20);

User user2 = new User();
user2.setName("lisi");
user2.setAge(22);

User user3 = new User();
user3.setName("wangwu");
user3.setAge(30);

userList.add(user2);
userList.add(user1);
userList.add(user3);

return SUCCESS;
}

页面jsp:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>optiontransferselect用法</title>
<s:head/>
</head>
<body>
<s:form action="" method="post" theme="simple">
<s:optiontransferselect name="select1" doubleList="userList2" list="userList" listKey="age" listValue="name" doubleName="select2"
headerKey="" headerValue="请选择" doubleListKey="age" doubleListValue="name" doubleHeaderKey=""
doubleHeaderValue="请选择" addAllToLeftLabel="全部左移" addAllToRightLabel="全部右移" addToLeftLabel="左移"
addToRightLabel="右移" allowAddAllToLeft="true" allowAddToLeft="true" allowAddToRight="true"
allowAddAllToRight="true" allowUpDownOnLeft="true" allowUpDownOnRight="true" leftUpLabel="上移"
leftDownLabel="下移" rightUpLabel="上移" rightDownLabel="下移" allowSelectAll="false"
/>
</s:form>
</body>
</html>

输出结果:


  Struts2的标签之UI标签