【问题标题】:jstl validates c:if on timeout which cause exceptionjstl 验证 c:if 超时导致异常
【发布时间】:2013-02-19 10:02:40
【问题描述】:

我有一个使用 RichFaces 和 jsf 的页面,我添加了一些 jstl 代码来验证 bean 中的某些内容,当会话超时时正在验证此代码,这会触发一些异常,代码是:

<c:if test="#{ViewerController.viewerBean.canCountMessages}" >
    <td>
        <a4j:commandButton value="count" action="#{ViewerController.doCount}" />
    </td>
</c:if>

因此此代码得到验证并引发以下异常:

/pages/viewer/index.xhtml @43,67 test="#{ViewerController.viewerBean.canCountMessages}" An error occurred performing resource injection on managed bean ViewerController

有没有办法防止在会话无效时验证 c:if 标记

注意:ViewerController 类是 SessionScoped 。

【问题讨论】:

  • 您问题中的术语非常混乱。此异常不是由代码上的某些验证错误引起的。它只是由您自己的代码中的错误引起的。请在堆栈跟踪中查找根本原因以了解异常的根本原因。另外,您问题上的 [jsp] 标记也令人困惑,因为您似乎根本没有使用 JSP。
  • 这是我的错误,没有说得更清楚,我所要求的是,当会话因超时而无效时,为什么 c:if 测试语句得到验证和执行,ViewerController 的调用.viewerBean.canCountMessages 由于某些(可能与会话相关)被调用的代码而崩溃,并且它可能会测试存储在会话本身中的某些对象,我要求的是我可以做类似 ,这可能会解决这个问题。
  • 不,您的问题是由 bean 中的资源注入问题引起的,正如顶部异常消息所说的那样。只需在堆栈跟踪中查找此问题的根本原因。例如。 NullPointerException 左右。然后根据该信息相应地修复代码。
  • 问题是我能够知道错误的根本原因是什么,在 ViewerController 托管 bean 的初始化中,我正在查询会话中保存的一些变量并假设它确实存在,但是当超时发生时为什么它会再次尝试重新验证页面,我正在使用一些 Richfaces a4j 标签,它不会评估其中的 EL,但是 jstl c:if 语句确实如此,也许就是这样它的工作方式就是这样,或者我可能有一些我不知道的配置问题。

标签: jsp jsf jstl


【解决方案1】:

我能够找到解决方法,它可能会帮助遇到类似问题的人,

好吧,我在用户登录后在会话中保存了一些变量,并查询该变量是否存在于 c:if 语句中,如:

在网络应用程序中登录用户时:

 FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("SessionValid",true); 

并在 ViewerController 类中添加了这个方法:

boolean isSessionValid(){
    return FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SessionValid") !=  null ;
}

我的代码是这样的:

<c:if test="#{ViewerController.sessionValid and ViewerController.viewerBean.canCountMessages}" >
    <td>
        <a4j:commandButton value="count" action="#{ViewerController.doCount}" />
    </td>
</c:if>

【讨论】:

  • 你为什么不在canCountMessages 后面的逻辑中做if (sessionValid != null) 以防止你在null 上调用方法?
  • 因为我确实根据存储在会话中的数据初始化了 bean (viewerBean)(使用我的 ViewerDao),所以在没有可用会话的情况下,我不想深入研究这和我只是没有创建viewerBean(null):),看起来很愚蠢,但我对这一切的经验并不丰富,我第一次看到jsp,jsf,richfaces ..是从5个月前开始的,我我是 C++ 开发者^_^
  • NPE 与 JSP/JSF/RF 无关,它只是基本 Java 的一部分。这也由 NPE 类的包名指示。
猜你喜欢
  • 2023-03-21
  • 2013-06-30
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多