乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      struts2學(xué)習(xí)筆記(6)——輸入校驗(yàn)(2)

       levinLee 2010-07-23

      上次做了一個(gè)簡(jiǎn)單的驗(yàn)證示例,但是你會(huì)發(fā)現(xiàn),每次提交后,數(shù)據(jù)就沒(méi)了,如果某一項(xiàng)輸入錯(cuò)誤會(huì)導(dǎo)致整個(gè)表單都得重填,這是一件非??植赖氖隆?

      要實(shí)現(xiàn)提交后數(shù)據(jù)還保留,可以使用兩種方法來(lái)實(shí)現(xiàn)。

      記住,struts2是基于請(qǐng)求轉(zhuǎn)發(fā)的。

      可以通過(guò)在表單中指定輸入框的value來(lái)實(shí)現(xiàn),<input type="text" name="username"

      value="${requestScope.username}" />

      前面已經(jīng)提到,struts2是基于請(qǐng)求轉(zhuǎn)發(fā)的,所以可以獲得之前輸入的數(shù)據(jù)。

      第二種方法就是用struts2的標(biāo)簽庫(kù)。

      <s:form action="register">
          <s:textfield name="username" label="username"></s:textfield>
          <s:password name="password" label="password"></s:password>
          <s:password name="repassword" label="re-password"></s:password>
          <s:textfield name="age" label="age"></s:textfield>
          <s:textfield name="birthday" label="birthday"></s:textfield>
          <s:textfield name="graduation" label="graduation"></s:textfield>
          <s:submit value=" submit "></s:submit>
      </s:form>

      但是輸入如下信息時(shí),顯示效果如圖所示 

      圖片一


       

      顯然這種效果并不好,struts2提供了自定義主題的功能,即在標(biāo)簽中增加屬性theme="simple"
      如:

      <s:textfield name="username" label="username" theme="simple" ></s:textfield>

      也可以放在form標(biāo)簽中,那么整個(gè)表單將采用此樣式,然后就可以把這些標(biāo)簽放在表格中。

      至于錯(cuò)誤信息可以放在action級(jí)別的error中。

      即在validate方法中,將驗(yàn)證錯(cuò)誤信息通過(guò)addActionError顯示出來(lái),此方法只接受一個(gè)參數(shù),即出錯(cuò)的信息。

      struts2 默認(rèn)表單中只能顯示fielderror,為此,要將出錯(cuò)信息顯示出來(lái),必須在頁(yè)面中新增加一個(gè)標(biāo)簽,即<s:actionerror />

      可以在此增加樣式。實(shí)際上現(xiàn)階段學(xué)到的標(biāo)簽都可以加樣式,CssStyle和CssClass.

      通過(guò)查看源代碼可以發(fā)現(xiàn),

      FieldError是一個(gè)map
      actionError是Collection(實(shí)際上是一個(gè) arraylist)

      如何在一個(gè)action封裝多個(gè)業(yè)務(wù)邏輯呢?

      可以在struts.xml的action中增加一個(gè)屬性,method="XXX"

      即會(huì)調(diào)用action的XXX方法,而不是execute方法。

      既然有不同的業(yè)務(wù)邏輯(方法),那么不可能使用同一驗(yàn)證方法。因此要實(shí)現(xiàn)不同的方法的驗(yàn)證,即生成驗(yàn)證方法validateXXX(XXX第一個(gè)大寫(xiě))

      如,在action中增加業(yè)務(wù)邏輯Test,那么就得在struts.xml中做如下修改:
          <action name="register2" class="cn.tshining.action.RegisterAction" method="Test">
              <result name="success">/success.jsp</result>
              <result name="input">/register2.jsp</result>
          </action>

          再把jsp頁(yè)面的action改為register2即可。

      那么再來(lái)看看工作流程:

      首先struts2攔截用戶請(qǐng)求,然后轉(zhuǎn)發(fā)到相應(yīng)的action,調(diào)用validateXXX方法,然后調(diào)用 validate方法,當(dāng)無(wú)錯(cuò)時(shí)執(zhí)行XXX方法。

      這樣以來(lái)便會(huì)調(diào)用兩次驗(yàn)證方法,但是這樣也不符合要求,要如何解決??

      有兩種方法:
          1.不override 父類的validate,因?yàn)楦割惖膙alidate方法時(shí)什么也不做的。
          2.將validate改名,由上面得知,可以將其改成validateExecute。

      如此一來(lái),便不會(huì)調(diào)用2個(gè)驗(yàn)證方法了。

      第2種方法實(shí)際上還是會(huì)執(zhí)行父類的validate,只不過(guò)是什么也不做罷了。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多