一个问题引起的思考——跨层调用的坏处

    今天遇到一个问题,花了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的方法。而且,要调用的方法必须通过合格的异常处理。

        如此这般,问题解决。

相关文章
相关标签/搜索