话说学习Struts2的标签其实早就完成了,只是学习的过程中出现了一个小意外,那就是将jsp页面的值传到Java中时却总是乱码,按照所有可行的方法都试过了,可惜,结果还是乱码、乱码、乱码。就在我走投无路时发现网上说Struts2 的有个版本有个bug,那就是中文乱码。于是我将我使用的Struts2的jar包版本换为2.2.1.1,没想到真的解决了这个问题。Apache发布了那么多Struts2的版本,偏偏让我撞见了这个有bug的版本,这运气….郁闷死我了…


         好了,言归正传。Struts2的UI标签是很简单也很容易使用。你只需要在jsp页面引入<%@ taglib  prefix=”s”  uri=”/struts-tags”%>就可以直接使用Struts的标签了。你不用写任何html代码。当然你要是不习惯Struts2的标签样式,你可以设置“theme=simple”来取消它,然后你就可以按照自己的需要去设置样式了。


本次学习依然在前几次的项目基础上练习的,只是将Struts2的jar包换为了2.2.1.1的。


        好了,请看我的这个注册表单register.jsp,代码如下:

<%@ page language="java"contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s"uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 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>注册表单</title>
    <style type="text/css">
       table.demo{border-collapse: collapse;}
       table.demo th,td {padding: 0; border: 1px solid #000;}
    </style>
</head>
<body>

    <s:form action="register" theme="simple">
       <table  class="demo"  width="400px"height="300px">
           <thead>
              <tr >
                  <th colspan="2"align="center">注册表</th>
              </tr>
           </thead>
           <tbody>   
              <tr>
                  <td style="text-align: right;">姓名:</td>
                  <td><s:textfield name="username"></s:textfield></td>   
              </tr>
              <tr>
                  <td style="text-align: right;">密码:</td>
                  <td><s:password name="password"></s:password></td>
              </tr>
              <tr>
                  <td style="text-align: right;">性别:</td>
                  <td><s:radio name="sex"list="sexList" ></s:radio></td>
              </tr> 
              <tr>
                  <td style="text-align: right;">国家:</td>
                  <td><s:select list="countryList"listKey="id" listValue="countryName"name="country" label="国家"></s:select></td>
              </tr>
              <tr>  
                  <td style="text-align: right;">自我介绍:</td>
                  <td><s:textarea name="about"label="自我介绍"></s:textarea></td>
              </tr>
              <tr>
                  <td style="text-align: right;">所属方向:</td>
                  <td><s:checkboxlist list="communityList" name="community" ></s:checkboxlist></td>
              </tr>
              <tr>
                  <td style="text-align: right;">您是否愿意接受签署协议:</td>
                  <td><s:checkbox name="mailingList"value="同意"></s:checkbox></td>
              </tr>
              <tr>
                  <td colspan="2"align="center"><s:submit value="提交"></s:submit></td>
              </tr> 
           </tbody>     
       </table>
    </s:form>

</body>
</html>

 看以看出,我为了按照自己的样式控制表格,我选择取消它的样式。


     更重要的是我们要理解Struts2的值栈。在Struts 2中,值栈是存储相关处理请求数据的地方 。因此,所有的form表单属性都将存储在值栈 。UI标签就是通过name属性来连接值栈。所以,name属性是必填的。


     你会发现这个form表单中的radio,select,checkboxlist都有一个list属性。list可以是Collection,Map或者Iterator。Select相对来说要复杂很多,listValue是呈现在页面的值,listKey是与listValue相对应且传到后台接受的值。Checkbox返回的是一个boolean值。


    关于标签就介绍这么多。现在来看看action文件,我的是RegisterAction.java,代码如下:

package com.iman.action;

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

import com.iman.model.Country;
import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {

         private Stringusername;
         private Stringpassword;
         private String sex;
         private Stringcountry;
         private String about;
         private Stringcommunity;
         private booleanmailingList;
         private List<Country>countryList;
         privateList<String> communityList;
         privateList<String> sexList;

         public Stringregister(){
                   returnSUCCESS;
         }
         public StringgetList(){
                   countryList=newArrayList<Country>();
                   countryList.add(newCountry(1,"中国"));
                   countryList.add(newCountry(2,"美国"));
                   countryList.add(newCountry(3,"法国"));
                   countryList.add(newCountry(4,"英国"));

                   communityList=newArrayList<String>();
                   communityList.add("Java");
                   communityList.add(".Net");
                   communityList.add("PHP");

                   sexList=newArrayList<String>();
                   sexList.add("男");
                   sexList.add("女");

                   return"list";
         }
         public StringgetUsername() {
                   returnusername;
         }
         public voidsetUsername(String username) {
                   this.username= username;
         }
         public StringgetPassword() {
                   returnpassword;
         }
         public voidsetPassword(String password) {
                   this.password= password;
         }
         public String getSex(){
                   return sex;
         }
         public voidsetSex(String sex) {
                   this.sex =sex;
         }
         public StringgetCountry() {
                   return country;
         }
         public voidsetCountry(String country) {
                   this.country= country;
         }
         public StringgetAbout() {
                   returnabout;
         }
         public voidsetAbout(String about) {
                   this.about =about;
         }
         public StringgetCommunity() {
                   returncommunity;
         }
         public void setCommunity(Stringcommunity) {
                   this.community= community;
         }
         public booleanisMailingList() {
                   returnmailingList;
         }
         public voidsetMailingList(boolean mailingList) {
                   this.mailingList= mailingList;
         }
         publicList<Country> getCountryList() {
                   returncountryList;
         }
         public voidsetCountryList(List<Country> countryList) {
                   this.countryList= countryList;
         }
         publicList<String> getCommunityList() {
                   returncommunityList;
         }
         public voidsetCommunityList(List<String> communityList) {
                   this.communityList= communityList;
         }
         publicList<String> getSexList() {
                   returnsexList;
         }
         public voidsetSexList(List<String> sexList) {
                   this.sexList= sexList;
         }

        其中username,password,sex,country, about, community,mailingList必须与form表单中的name属性的字段一样,否则将不能被Struts 2接收。

        下面来看看struts.xml配置文件:

 

<action name="getList" class="com.iman.action.RegisterAction"method="getList" >
            <result name="list">/register.jsp</result>
        </action>
        <action name="register" class="com.iman.action.RegisterAction"method="register">
            <result name="success">/results/registerSuccess.jsp</result>
        </action>


 

       有两个action,其中一个action是将list传到页面,而另一个action则是将注册表单的信息传到一个接受页面,这个页面就是registerSuccess.jsp,代码如下:<%@ page language="java"contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s"uri="/struts-tags" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 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>注册成功</title>
</head>
<body>
姓名:<s:property value="username"/><br>
性别:<s:property value="sex"/><br>
国家:<s:property value="country"/><br>
自我介绍:<s:property value="about"/><br>
所属行业:<s:property value="community"/><br>
邮件列表:<s:property value="mailingList"/>
</body>
</html>
 


 

        好了,开始运行这个表单了,启动服务器并部署项目,在地址栏输入:http://localhost:8000/Struts2Tutorial/getList.action(想想为什么要直接从action跳转到页面,我想我不说你也知道吧,当时我学习时可是费了好大劲儿才明白过来!从action跳转完成了数据的初始化),页面如下:


Struts2学习笔记(4)-----Struts2常见的表单标签用法_Struts2


      输入数值,点击提交按钮,将跳转到registerSuccess.jsp页面,效果如下:


Struts2学习笔记(4)-----Struts2常见的表单标签用法_Struts2_02


      是不是很简单啊?你只是看着简单而已,通过这个表单,我对Struts2的标签有了一个新的认识,你呢?


这是本人学习的结果,欢迎转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7060344,谢谢~

 

注意: <s:select name="country" label="国家" list="countryList" listKey="id" listValue="countryName"  />

listValue 是在页面上显示内容(countryName),listKey是要传到后台的内容(id)