1. 程式人生 > >Struts學習(五)-表單標簽,一個實例練習

Struts學習(五)-表單標簽,一個實例練習

area 輸入 pan als 視覺效果 font pack quest 文本

表單標簽將在 HTML 文檔裏被呈現為一個表單元素 使用表單標簽的優點: 表單回顯 對頁面進行布局和排版

標簽的屬性可以被賦值為一個靜態的值或一個 OGNL 表達式. 如果在賦值時使用了一個 OGNL 表達式並把它用 %{} 括起來, 這個表達式將會被求值.

表單標簽的共同屬性

技術分享圖片

* 該屬性只在沒有使用 simple 主題時才可以使用.

form標簽

技術分享圖片

默認情況下, form 標簽將被呈現為一個表格形式的 HTML 表單. 嵌套在 form 標簽裏的輸入字段將被呈現為一個表格行.

每個表格行由兩個字段組成, 一個對應著行標, 一個對應著輸入元素. 提交按鈕將被呈現為一個橫跨兩列單元格的行

textfield, password, hidden 標簽

textfield 標簽將被呈現為一個輸入文本字段, password 標簽將被呈現為一個口令字段, hidden 標簽將被呈現為一個不可見字段.

技術分享圖片

password 標簽擴展自 textfield 標簽, 多了一個 showPassword 屬性. 該屬性時布爾型. 默認值為 false, 它決定著在表單回顯時是否顯示輸入的密碼.

submit 標簽

submit 標簽將呈現為一個提交按鈕.

根據其 type 屬性的值. 這個標簽可以提供 3 種呈現效果:

input: <input type=“submim” …/>

button: <input type=“button” …/>

image: <input type=“image” />

技術分享圖片

textarea 標簽

textarea 標簽將呈現為一個 HTML 文本域元素

技術分享圖片

*checkbox 標簽

checkbox 標簽將呈現為一個 HTML 復選框元素. 該復選框元素通常用於提交一個布爾值 當包含著一個復選框的表單被提交時, 如果某個復選框被選中了, 它的值將為 true,

這個復選框在 HTTP 請求裏增加一個請求參數.但如果該復選框未被選中, 在請求中就不會增加一個請求參數.

checkbox 標簽解決了這個局限性, 它采取的辦法是為單個復選框元素創建一個配對的不可見字段

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

*checkbox 標簽

checkbox 標簽有一個 fieldValue 屬性, 該屬性指定的值將在用戶提交表單時作為被選中的單選框的實際值發送到服務器.

如果沒有使用 fieldValue 屬性, 單選框的值將為 true 或 false.

技術分享圖片

示例:

技術分享圖片

list, listKey 和 listValue 屬性

示例:

技術分享圖片

list, listKey 和 listValue 屬性

賦值為一個Map:

技術分享圖片

賦值為一個 Collection(或一個對象數組): 把數組或 Collection 賦值給 list 屬性,

把用來提供選項值的對象屬性賦給 listKey 屬性, 把用來提供選項行標的對象屬性賦給 listValue 屬性

技術分享圖片

技術分享圖片

技術分享圖片

radio 標簽

radio 標簽將呈現為一組單選按鈕, 單選按鈕的個數與程序員通過該標簽的 list 屬性提供的選項的個數相同.

一般地, 使用 radio 標簽實現 “多選一”, 對於 “真/假” 則該使用 checkbox 標簽.

技術分享圖片

示例:

技術分享圖片

select 標簽

select 標簽將呈現一個 select 元素.

技術分享圖片

示例:

技術分享圖片

optiongroup 標簽

optiongroup 標簽對 select 元素所提供的選項進行分組. 每個選項有它自己的來源.

技術分享圖片

示例:

技術分享圖片

checkboxlist 標簽

checkboxlist 標簽將呈現一組多選框.

技術分享圖片

checkbox 標簽被映射到一個字符串數組或是一個基本類型的數組.

若它提供的多選框一個也沒有被選中, 相應的屬性將被賦值為一個空數組而不是空值.

示例:

技術分享圖片

技術分享圖片

主題

默認情況下, form 標簽將呈現為一個 HTML form 元素和一個 table 元素.

技術分享圖片

每一種輸入標簽都將呈現為一個帶標號的輸入元素, 而這個輸入元素將被包含在一個 tr 元素和 td 元素的內部

技術分享圖片

主題: 為了讓所有的 UI 標簽能夠產生同樣的視覺效果而歸集到一起的一組模板.

即風格相近的模板被打包為一個主題

simple: 把 UI 標簽翻譯成最簡單的 HTML 對應元素, 而且會忽視行標屬性

xhtml: xhtml 是默認的主題. 這個主題的模板通過使用一個布局表格提供了一種自動化的排版機制.

css_xhtml: 這個主題裏的模板與 xhtml 主題裏的模板很相似, 但它們將使用 css 來進行布局和排版 ajax:

這個主題裏的模板以 xhtml 主題裏德模板為基礎, 但增加了一些 Ajax 功能.

修改主題: 通過 UI 標簽的 theme 屬性 在一個表單裏, 若沒有給出某個 UI 標簽的 theme 屬性,

它將使用這個表單的主題 在 page, request, session 或 application 中添加一個 theme 屬性 修改 struts.properties 文件中的 struts.ui.theme 屬性.

技術分享圖片

Role.java

package com.yuyi.struts.valueStack.app;

public class Role {
 
    private Integer roleId;
    private String roleName;
    
    public Integer getRoleId() {
        return roleId;
    }

    public void setRoleId(Integer roleId) {
        this.roleId = roleId;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public Role(Integer roleId, String roleName) {
        super();
        this.roleId = roleId;
        this.roleName = roleName;
    }

    public Role() {
        // TODO Auto-generated constructor stub
    }
}

Department.java

package com.yuyi.struts.valueStack.app;

public class Department {
 
    private Integer deptId;
    private String deptName;
    
    
    public String getDeptName() {
        return deptName;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
    public Integer getDeptId() {
        return deptId;
    }
    public void setDeptId(Integer deptId) {
        this.deptId = deptId;
    }
    public Department(Integer deptId,String deptName) {
        super();
        this.deptName = deptName;
        this.deptId = deptId;
    }
    
    public Department() {
        // TODO Auto-generated constructor stub
    }
}

Dao.java

package com.yuyi.struts.valueStack.app;

import java.util.ArrayList;
import java.util.List;

public class Dao {

    public List<Role> getRoles(){
        
        List<Role> roles=new ArrayList<>();
        
        roles.add(new Role(2001,"XX"));
        roles.add(new Role(2002,"YY"));
        roles.add(new Role(2003,"ZZ"));
        
        return roles;
    }
    
    public List<Department> getDepartments(){
        List<Department> depts=new ArrayList<>();
        
        depts.add(new Department(1001,"AAA"));
        depts.add(new Department(1002,"BBB"));
        depts.add(new Department(1003,"CCC"));
        depts.add(new Department(1004,"DDD"));
        depts.add(new Department(1005,"EEE"));
        
        return depts;
    }
}

Employee.java

package com.yuyi.struts.valueStack.app;

import java.util.List;
import java.util.Map;

import org.apache.struts2.interceptor.RequestAware;

public class Employee implements RequestAware{

    private Dao dao=new Dao();
    
    private String name;
    private String password;
    private String gender;
    private String dept;
    private List<String> roles;
    private String desc;
    
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getDept() {
        return dept;
    }

    public void setDept(String dept) {
        this.dept = dept;
    }

    public List<String> getRoles() {
        return roles;
    }

    public void setRoles(List<String> roles) {
        this.roles = roles;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String save() {
        System.out.println("save"+this);
        return "save";
    }
    
    public String input() {
        requestMap.put("depts", dao.getDepartments());
        requestMap.put("roles", dao.getRoles());
        return "input";
    }
private Map<String, Object> requestMap=null;
    @Override
    public void setRequest(Map<String, Object> request) {
        this.requestMap=request;
        
    }

    @Override
    public String toString() {
        return "Employee [name=" + name + ", password=" + password + ", gender=" + gender + ", dept=" + dept
                + ", roles=" + roles + ", desc=" + desc + "]";
    }
    
    
}

index1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 
   <a href="emp-input.action">Emp Input Page</a>
</body>
</html>

emp-input.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

   <s:form action="emp-save">
   <s:textfield name="name" label="Name"></s:textfield>
   <s:password name="password" label="Password"></s:password>
   
   <s:radio  name="gender" list="#{‘1‘:‘Male‘,‘0‘:‘Female‘}" label="Gender">
   </s:radio>
   
   <s:select list="#request.depts" listKey="deptId" listValue="deptName" name="dept" label="Department">
   </s:select>
   
   <s:checkboxlist list="#request.roles" listKey="roleId" listValue="roleName" name="roles" label="Role">
   </s:checkboxlist>
   <s:textarea name="Desc" label="Desc"></s:textarea>
   <s:submit></s:submit>
    </s:form>
</body>
</html>

emp-save.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Name:${name}
<br><br>
Password:${password}
<br><br>
Gender:${gender}
<br><br>
Dept:${dept}
<br><br>
Roles:${roles}
<br><br>
Desc:${desc }
</body>
</html>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<!-- 打開靜態方法調用的限制 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<!-- 配置Struts可以受理的請求的擴展名 -->
<constant name="struts.action.extension" value="action,do"></constant>

  <package name="default"  extends="struts-default" >

<action name="emp-save" class="com.yuyi.struts.valueStack.app.Employee"
method="save">
<result name="save">/emp-save.jsp</result>
</action>
</package>

</struts>

Struts學習(五)-表單標簽,一個實例練習