麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

利用 Struts 實現(xiàn)動態(tài)控制表格大小(1)

2019-11-18 12:55:32
字體:
來源:轉載
供稿:網友

  在SUCceeding with Struts的前面安裝部分,我間接提到了DynaForms在運行期內可以動態(tài)的控制表格大小。換句話說,就是能夠根據(jù)需要得到5行、或者10行、或者15行長的表格。可能有點不明智,我把這種策略的實際實現(xiàn)作為一種練習留給了讀者自己。在接下來的幾個月內,我收到了幾十個讀者的請求,他們請求給出具體的實現(xiàn)細節(jié),所以這個月我將用兩種不同的方法來實現(xiàn)動態(tài)調整的表格。
  第一個方法就是我在前面的欄目中提到的那個方法,將尺寸參數(shù)留給DynaForm 的form-PRoperty 屬性來實現(xiàn)。為了演示具體過程,我們來看看一個非常簡單的應用:添加關于不同Star Wars 演員的注釋。在這個應用中我們感愛好的要害事實是:演員的數(shù)量在表格配置中動態(tài)設定,而不是在struts-config.xml文件中動態(tài)設定。
  首先,我們先來看看struts-config.xml 文件:
  
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
                  "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd";>
  <struts-config>
    <form-beans>
      <form-bean name="dynamicArrayForm" type="org.apache.struts.validator.DynaValidatorForm">
        <form-property name="people" type="demo.Person[]"/>
      </form-bean>
    </form-beans>
  
  
  <action-mappings>
    <action path="/setupForm" type="demo.SetupFormAction" name="dynamicArrayForm" scope="session"
  
     validate="false">
      <forward name="success" path="/displayForm.jsp"/>
    </action>
    
  <action path="/processActorComments"
  type="demo.ProcessFormAction"
      name="dynamicArrayForm" scope="session"
  validate="false">
      <forward name="success" path="/displayForm.jsp"/>
    </action>
  </action-mappings>
  </struts-config>
  
  如你所見,這是一個相當簡單的配置文件,只定義了一個表格和兩個動作。第一個動作,/setupForm,用來在初始顯示之前配置表格;另一個動作,/processActorComments 用來處理用戶輸入的注釋。
  在這個文件中有兩個重要的事情需要注重,它們對于事態(tài)的發(fā)展很要害:
  1. people 表格屬性定義為demo.Person[] 類型(即demo.Person的一個排列),但不給出任何size 參數(shù)。這就為要創(chuàng)建的排列產生了一個占位符,但是沒有任何例示的實排列。
  2. 這兩個動作將表格定義在會話期范圍內。這是很要害的,因為用戶在填寫數(shù)值之后提交表格時,數(shù)值在動作執(zhí)行之前已經填充到表格內了。這就意味著沒有機會手動創(chuàng)建具有恰當空位數(shù)的排列,正如你在表格顯示之前在SetupFormAction 類中看到的情況一樣。換句話說,當表格提交時,必須已經有恰當?shù)目瘴粊斫邮鼙砀裰担ㄒ荒鼙WC這個的方法就是在會話期范圍內就已經有了這個表格。
  基本上在Person bean 中是沒有值的,他只是一個具有l(wèi)astName、 firstName、 dateOfBirth、gender 和comment字段的普通bean。源文件包括在WAR 文件內。
  現(xiàn)在我們來看看SetupFormAction 類,它在表格第一次顯示之前調用。
  
  package demo;
  
  /**
   * Copyright 2004, James M. Turner.
   * All Rights Reserved
   *
   * A Struts action that sets up a DynaForm which is globally scoped
   */
  
  import java.io.IOException;
  import javax.servlet.ServletException;
  import javax.servlet.http.*;
  
  import org.apache.struts.action.*;
  import org.apache.struts.validator.DynaValidatorForm;
  
  public class SetupFormAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException {
  
      DynaValidatorForm df = (DynaValidatorForm) form;
      Person[] p = new Person[3];
      p[0] = new Person();
      p[0].setDateOfBirth("07/13/1942");
      p[0].setLastName("Ford");
      p[0].setFirstName("Harrison");
      p[0].setGender("M");
      p[1] = new Person();
      p[1].setDateOfBirth("10/21/1956");
      p[1].setLastName("Fisher");
      p[1].setFirstName("Carrie");
      p[1].setGender("F");
      p[2] = new Person();
      p[2].setDateOfBirth("09/25/1951");
      p[2].setLastName("Hamill");
      p[2].setFirstName("Mark");
      p[2].setGender("M");
  
      df.set("people", p);
  
      return mapping.findForward("success");
    }
  }
  
  這一次也沒有許多東西要看的。execute 方法要做的第一件事情,和任何基于DynaForm的動作所做的一樣,就是將泛型ActionForm 類放到DynaValidatorForm內。這就使得我們可以在表格上使用get和set 方法。第二件事情就是,創(chuàng)建一個具有三個元素的類型Person 的排列。在這個方法中,尺寸是硬布線的,在實際應用中可以從數(shù)據(jù)庫中選擇一個尺寸。我們需要考慮的重要事情是排列應該在代碼中創(chuàng)建,而不是由Struts引擎自己創(chuàng)建。這樣行數(shù)可根據(jù)應用要求由代碼隨意指定。
  一旦排列已經確定,方法將創(chuàng)建三個Person 類實例并賦與數(shù)值。同樣,在實際的應用中可通過一個循環(huán)來實現(xiàn),這個循環(huán)不斷地從數(shù)據(jù)庫中讀取行和填充表格行。最后,動作返回成功,導致Struts轉移控制到displayForm.jsp 頁。
  
  <!--
    Copyright 2004, James M Turner.
    All Rights Reserved
    
    -->
  
  <%@ taglib uri="/WEB-INF/struts-Html.tld" prefix="html" %>
  <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
  
  <head>
  <title>Star Wars Actor Fact Page</title>
  </head>
  <H1><center>Start Wars Actor Fact Page</title>
  <html:form action="/processActorComments" >
    <table border="1" width="80%">
      <tr><th>Last Name</th><th>First Name</th><th>Date of Birth</th><th>Comment</th></tr>
      <c:forEach var="people" items="${dynamicArrayForm.map.people}">
        <tr><td><c:out value="${people.lastName}"/></td>
          <td><c:out value="${people.firstName}"/></td>
          <td><c:out value="${people.dateOfBirth}"/></td>
          <td><html:text name="people" indexed="true" property="comment"/></td>
        </tr>
      </c:forEach>
    </table>
    <P/>
    <html:submit value="Update Comments"/>
  </html:form>
  
  同樣,這里也沒有很多東西要看的,他與我們上一篇文章查看固定長度的行時的代碼完全一樣。該頁迭代行(記住在JSTL中我們必須使用map 屬性來獲得到DynaForm 屬性的訪問),顯示演員的姓、名和出生日期,并提供文本域以便輸入注釋。
  當我們聚焦我們的瀏覽器合請求時,http://localhost:8080/struts/setupForm.do (假設你把struts.war 文件放在你本地機器的Tomcat 內),將會出現(xiàn)下列頁面:
  
  Start Wars Actor Fact Page Last Name First Name Date of Birth Comment
  Ford Harrison 07/13/1942 
  Fisher Carrie 10/21/1956 
  Hamill Mark 09/25/1951

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美电影在线观看 | 在线小视频国产 | 热@国产 | 一级一级一级一级毛片 | 91在线视频精品 | 久久亚洲国产午夜精品理论片 | 免费欧美一级视频 | 13一14毛片免费看 | 国产一级一国产一级毛片 | 欧洲成人一区 | 伊人yinren22综合网色 | 黄色特级大片 | 中国av中文字幕 | 叉逼视频 | 天堂在线中文资源 | 国产寡妇xxxxxxxx性开放 | 91网站在线观看视频 | 久久精品视频16 | 欧美日韩国产一区二区三区在线观看 | 国产精品18久久久久久久 | 日韩视频一二区 | www久久国产 | 精品中文字幕在线播放 | 国产精品一区二区在线 | 久久久久久久久成人 | 久久免费视频7 | 黄在线看 | 午夜精品久久久久久久99热浪潮 | 日韩在线欧美在线 | 91网站链接| 国产精品18久久久久久久 | 欧美一级毛片免费观看 | 日韩午夜一区二区三区 | 国产一区二区在线免费播放 | 久久久久久久久久久久久九 | 国产毛毛片一区二区三区四区 | 日本一区二区在线看 | 日韩一级免费毛片 | 懂色粉嫩av久婷啪 | 叉逼视频 | 国产精品免费在线 |