<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無(wú)為

    無(wú)為則可為,無(wú)為則至深!

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

    package tutorial;

    import java.util.List;

    import com.opensymphony.xwork2.ActionSupport;

    public class ProductConfirm extends ActionSupport {
    ? ?
    public List < Product > products;

    ? ?
    public List < Product > getProducts() {
    ? ? ? ?
    return products;
    ? ?}


    ? ?
    public void setProducts(List < Product > products) {
    ? ? ? ?
    this .products = products;
    ? ?}

    ? ?
    ? ?@Override
    ? ?
    public String execute() {
    ? ? ? ?
    for (Product p : products) {
    ? ? ? ? ? ?System.out.println(p.getName()
    + " | " + p.getPrice() + " | " + p.getDateOfProduction());
    ? ? ? ?}

    ? ? ? ?
    return SUCCESS;
    ? ?}

    }

    接看,在同上的包中加入ProductConfirm-conversion.properties,代碼如下:

    Element_products = tutorial.Product

    再在struts.xml文件中配置ProductConfirm Action,代碼片段如下:

    < action name ="ProductConfirm" class ="tutorial.ProductConfirm" >
    ? ?
    < result > /ShowProducts.jsp </ result >
    </ action >

    在WEB文件夾下新建AddProducts.jsp,內(nèi)容如下:

    <% @ page ?contentType = " text/html; charset=UTF-8 " %>
    <% @taglib prefix = " s " uri = " /struts-tags " %>
    < html >
    < head >
    ? ?
    < title > Hello World </ title >
    </ head >
    < body >
    ? ?
    < s:form action ="ProductConfirm" theme ="simple" > ? ? ? ? ? ?
    ? ? ? ?
    < table >
    ? ? ? ? ? ?
    < tr style ="background-color:powderblue; font-weight:bold;" >
    ? ? ? ? ? ? ? ?
    < td > Product Name </ td >
    ? ? ? ? ? ? ? ?
    < td > Price </ td >
    ? ? ? ? ? ? ? ?
    < td > Date of production </ td >
    ? ? ? ? ? ?
    </ tr >
    ? ? ? ? ? ?
    < s:iterator value ="new int[3]" status ="stat" >
    ? ? ? ? ? ? ? ?
    < tr >
    ? ? ? ? ? ? ? ? ? ?
    < td >< s:textfield name ="%{'products['+#stat.index+'].name'}" /></ td >
    ? ? ? ? ? ? ? ? ? ?
    < td >< s:textfield name ="%{'products['+#stat.index+'].price'}" /></ td >
    ? ? ? ? ? ? ? ? ? ?
    < td >< s:textfield name ="%{'products['+#stat.index+'].dateOfProduction'}" /></ td >
    ? ? ? ? ? ? ? ?
    </ tr >
    ? ? ? ? ? ?
    </ s:iterator >
    ? ? ? ? ? ?
    < tr >
    ? ? ? ? ? ? ? ?
    < td colspan ="3" >< s:submit /></ td >
    ? ? ? ? ? ?
    </ tr >
    ? ? ? ?
    </ table >
    ? ?
    </ s:form > ? ?
    </ body >
    </ html >

    在同樣的文件夾下創(chuàng)建ShowProducts.jsp,內(nèi)容如下:

    <% @ page ?contentType = " text/html; charset=UTF-8 " %>
    <% @taglib prefix = " s " uri = " /struts-tags " %>
    < html >
    < head >
    ? ?
    < title > Hello World </ title >
    </ head >
    < body > ? ?
    ? ?
    < table >
    ? ? ? ?
    < tr style ="background-color:powderblue; font-weight:bold;" >
    ? ? ? ? ? ?
    < td > Product Name </ td >
    ? ? ? ? ? ?
    < td > Price </ td >
    ? ? ? ? ? ?
    < td > Date of production </ td >
    ? ? ? ?
    </ tr >
    ? ? ? ?
    < s:iterator value ="products" status ="stat" >
    ? ? ? ? ? ?
    < tr >
    ? ? ? ? ? ? ? ?
    < td >< s:property value ="name" /></ td >
    ? ? ? ? ? ? ? ?
    < td > $ < s:property value ="price" /></ td >
    ? ? ? ? ? ? ? ?
    < td >< s:property value ="dateOfProduction" /></ td >
    ? ? ? ? ? ?
    </ tr >
    ? ? ? ?
    </ s:iterator >
    ? ?
    </ table >
    </ body >
    </ html >

    發(fā)布運(yùn)行應(yīng)用程序,在瀏覽器中鍵入http://localhost:8080/Struts2_Converter/AddProducts.jsp,出現(xiàn)如圖4所示頁(yè)面:
    圖4 添加產(chǎn)品頁(yè)面
    圖4 添加產(chǎn)品頁(yè)面

    按圖4所示,填寫表單,按“Submit”提交,出現(xiàn)圖5所示頁(yè)面:
    圖5 查看產(chǎn)品頁(yè)面
    圖5 查看產(chǎn)品頁(yè)面

    查看服務(wù)器的控制臺(tái),有如下輸出:

    Expert One-on-One J2EE Development without EJB | 39.99 | Mon Jun 21 00 : 00 : 00 CST 2004
    Pro Spring |
    32.99 | Mon Jan 31 00 : 00 : 00 CST 2005
    Core J2EE Patterns: Best Practices and Design Strategies
    , Second Edition | 34.64 | Sat May 10 00 : 00 : 00 CST 2003

    上面的代碼并不復(fù)雜,但有幾點(diǎn)需要說(shuō)明:

    1. ProductConfirm文件中的for(Product p : productes)的寫法是J2SE 5.0中的新特性,作用遍歷products列表;
    2. List<Product>也是J2SE 5.0的才有的泛型(Generic);
    3. ProductConfirm-conversion.properties中“Element_products=tutorial.Product”是告訴Struts 2.0列表products的元素的類型為Product,而不是定義轉(zhuǎn)換器;
    4. 在AddProducts.jsp的<s:textfield>的name為“%{'products['+#stat.index+'].name'}”,%{exp}格式表示使用OGNL表達(dá)式,上述表達(dá)式的相當(dāng)于<%= "products[" + stat.index + "].name" %>,至于<s:iterator>標(biāo)志的用法可以參考我之前的文章《常用的Struts 2.0的標(biāo)志(Tag)介紹》。

    轉(zhuǎn)換錯(cuò)誤處理

    不知道大家在運(yùn)行上面的例子時(shí),有沒(méi)有填錯(cuò)日期或數(shù)字情況,又或者您有沒(méi)有思考過(guò)這種情況?如果還沒(méi)有嘗試的朋友可以試一下,在第一行的Price和Date of production中輸入英文字母,然后按“Submit”提交。你會(huì)看到頁(yè)面為空白,再看一下服務(wù)器的控制臺(tái)輸出,有如下語(yǔ)句: 警告: No result defined for action tutorial.ProductConfirm and result input,它提示我們沒(méi)有為Action定義輸入結(jié)果,所以,我們應(yīng)該在源代碼文件夾下的struts.xml中的ProductConfirm Action中加入以下代碼:

    < result name ="input" > /AddProducts.jsp </ result >

    重新加載應(yīng)用程序,刷新瀏覽器重新提交請(qǐng)求,這時(shí)頁(yè)面返回AddProducts.jsp,格式錯(cuò)誤的輸入框的值被保留,如下圖6所示:
    圖6 沒(méi)有提示的錯(cuò)返回頁(yè)面
    圖6 沒(méi)有提示的錯(cuò)返回頁(yè)面

    當(dāng)然,我們還可以在頁(yè)面上加上錯(cuò)誤提示信息,通過(guò)在AddProducts.jsp的“<body>”后,加入下面代碼可以實(shí)現(xiàn):

    < div style ="color:red" >
    ? ?
    < s:fielderror />
    </ div >

    刷新瀏覽器,重新提交請(qǐng)求,出現(xiàn)如圖7所示頁(yè)面:
    圖7 帶提示的錯(cuò)返回頁(yè)面
    圖7 帶提示的錯(cuò)返回頁(yè)面

    以上的功能的都是通過(guò)Struts 2.0里的一個(gè)名為conversionError的攔截器(interceptor)工作,它被注冊(cè)到默認(rèn)攔截器棧(default interceptor stack)中。Struts 2.0在轉(zhuǎn)換出錯(cuò)后,會(huì)將錯(cuò)誤放到ActionContext中,在conversionError的作用是將這些錯(cuò)誤封裝為對(duì)應(yīng)的項(xiàng)錯(cuò)誤(field error),因此我們可以通過(guò)<s:fielderror />來(lái)將其在頁(yè)面上顯示出來(lái)。另外,大家看第二和第三行的Price都被賦為0.0的值,而第一行則保留其錯(cuò)誤值。這同樣是conversionError的功勞——沒(méi)有出錯(cuò)的行調(diào)用的products[index].price(默認(rèn)值為0.0),而出錯(cuò)的行則會(huì)被賦為頁(yè)面所提交的錯(cuò)誤值,這樣可以提供更好的用戶體驗(yàn)。

    總結(jié)

    Struts 2.0的轉(zhuǎn)換器簡(jiǎn)化的WEB應(yīng)用程序的模型,為我們的編程帶來(lái)極大的方便。

    posted on 2006-11-07 14:26 Max 閱讀(571) 評(píng)論(2) ?編輯?收藏引用收藏至365Key 所屬分類: Struts 2.0系列


    凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
    、轉(zhuǎn)載請(qǐng)注明來(lái)處和原文作者。非常感謝。

    posted on 2006-11-08 22:57 草兒 閱讀(305) 評(píng)論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 国产免费一区二区视频| 亚洲人成人网毛片在线播放| 亚洲色欲一区二区三区在线观看| 亚洲精品NV久久久久久久久久| 四虎永久免费地址在线观看| 国产真人无遮挡作爱免费视频| 国产精品久久久久影院免费| 国产国产成年年人免费看片| 又粗又大又猛又爽免费视频| 亚洲A丁香五香天堂网| 亚洲国产中文v高清在线观看| 亚洲国产一区二区视频网站| 夜夜春亚洲嫩草影院| 国产av天堂亚洲国产av天堂| 亚洲国产精品乱码一区二区| 亚洲尹人九九大色香蕉网站 | 最新猫咪www免费人成| 青青草免费在线视频| 免费看片免费播放| 免费h黄肉动漫在线观看| 亚洲欧洲中文日韩av乱码| 亚洲深深色噜噜狠狠爱网站| 亚洲一区精品中文字幕| 波多野结衣亚洲一级| 色五月五月丁香亚洲综合网| 丰满少妇作爱视频免费观看| 黄页免费在线观看| 五月婷婷综合免费| 国产性生交xxxxx免费| 自拍偷自拍亚洲精品被多人伦好爽| 精品亚洲综合在线第一区| 亚洲成人免费电影| 国产精品久久久久久亚洲影视 | 91大神亚洲影视在线| 2020国产精品亚洲综合网| 青青青视频免费观看| 免费播放一区二区三区| 免费黄色app网站| 在线亚洲午夜理论AV大片| 亚洲无限乱码一二三四区| 美女羞羞喷液视频免费|