Jsp jstl在导致异常的超时时验证c:if

Jsp jstl在导致异常的超时时验证c:if,jsp,jsf,jstl,Jsp,Jsf,Jstl,我有一个使用RichFaces和jsf的页面,我添加了一些jstl代码来验证bean中的某些内容,当会话超时时会验证这些代码,这会触发一些异常,代码是: <c:if test="#{ViewerController.viewerBean.canCountMessages}" > <td> <a4j:commandButton value="count" action="#{ViewerController.doCount}" />

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

<c:if test="#{ViewerController.viewerBean.canCountMessages}" >
    <td>
        <a4j:commandButton value="count" action="#{ViewerController.doCount}" />
    </td>
</c:if>
有没有一种方法可以防止在会话无效时验证c:if标记


注意:ViewerController类是SessionScope。

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

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

将用户登录到web应用程序时:

 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>


您问题中的术语非常混乱。此异常不是由代码上的某些验证错误引起的。这只是由您自己的代码中的错误引起的。请在堆栈跟踪中查找根本原因,以了解异常的根本原因。另外,您的问题上的
[jsp]
标记也令人困惑,因为您似乎根本没有使用jsp。我的错误是没有说得更清楚,我想问的是,当会话在超时时无效时,为什么c:if测试语句得到验证和执行,ViewerController.viewerBean.canCountMessages的调用由于被调用的某些-可能依赖于会话的-代码而崩溃,它可能会在会话本身中存储的某个对象上进行测试,我想问的是,我是否可以执行类似的操作,以解决此问题。不,您的问题是由bean中的资源注入问题引起的,正如上面的异常消息所说的那样。只需在堆栈跟踪中查找此问题的根本原因。例如,
NullPointerException
左右。然后根据这些信息相应地修改代码。问题是我能够知道错误的根本原因是什么,在ViewerController托管bean初始化的某个地方,我查询了会话中保存的某个变量,并假设它确实存在,但是,当超时发生时,为什么它会再次尝试重新验证页面,我使用了一些Richfaces a4j标记,它不会对其中的EL求值,但是jstl c:if语句会求值,这可能就是它的工作方式,也可能是我不知道的一些配置问题。如果(sessionValid!=null)在
canCountMessages
后面的逻辑中,以防止调用
null
上的方法,因为我确实根据会话本身存储的数据初始化bean(viewerBean)(使用我的ViewerDao),因此,在没有可用会话的情况下,我不想深入研究这个问题,我只是没有创建viewerBean(null):),这看起来很愚蠢,但我在这方面没有太多经验,因为我第一次看到jsp、jsf和richfaces。。是5个月前的,我是C++开发人员^ ^,NPE与JSP/JSF/RF无关,它只是基本java的一部分。这也由NPE类的包名表示。
<c:if test="#{ViewerController.sessionValid and ViewerController.viewerBean.canCountMessages}" >
    <td>
        <a4j:commandButton value="count" action="#{ViewerController.doCount}" />
    </td>
</c:if>