一個問題引起的思考——跨層調用的壞處

    今天遇到一個問題,花了2小時左右,才把問題搞定。通過總結,感受這個問題有普適性,故記錄之。
數據庫

    咱們常常在jsp頁面使用struts標籤和ognl表達式。ognl比el強大的地方之一是,它能夠調用對象的方法。處於偷懶的想法,我並無像往常同樣,把查出來的數據列表放在做用域或值棧中,而是直接調用Action中的dao成員變量中的方法——這裏不討論Action中使用dao是否合適,不是要說的重點。
瀏覽器

    這是jsp中的代碼:
jsp

<select id="sel1">ide

  <s:iterator  value="residentDao.getBuild()" >ui

<option value="<s:property value='id'/>"><s:property value="buildname"/>  </option>spa

 </s:iterator>指針

 </select>對象

  問題現象:作用域

  結果,頁面並無出現我想要的數據。get

    通常而言,咱們會經過錯誤提示來定位及判斷錯誤,可是!瀏覽器和控制檯也沒有出現任何錯誤提示信息。

    最後,忍着噁心的感受看了很久,才找到問題所在——數據庫配置出了點小錯誤。

    數據庫配置沒什麼好說的。最讓我感受不解的是,爲何沒有錯誤提示?

問題緣由:

      通常在後臺,咱們會對「residentDao.getBuild()」這類代碼進行trycatch,可在jsp頁面中,大概是從友好界面的角度考慮,ognl彷佛並未有異常處理(比方說:取不到值,也不會報空指針異常)。並且,jsp頁面原本就很差調錯,jsp中調用這類方法壓根就是找死的行爲。

解決辦法:

        問題找到了,接下來要想的是:如何杜絕這種特別能噁心人的狀況?

        個人解決辦法是:杜絕跨層調用,加上完善的異常處理。

        像我此次的例子,jsp頁面中,絕對不該該跨過Action調用dao的方法。而且,要調用的方法必須通過合格的異常處理。

        如此這般,問題解決。

相關文章
相關標籤/搜索