JSF 2会话豆问题

时间:2011-06-20 08:41:39

标签: session jsf-2 myfaces viewexpiredexception

我有一个使用多个会话Bean运行的JSF 2.1(MyFaces)应用程序(所有bean都是会话bean)。 超时在web.xml中定义如下:

<session-config>
    <session-timeout>3600</session-timeout>
</session-config>

这意味着1小时。

问题是在正常使用时我得到No Saved View...例外:

SEVERE: An exception occurred
javax.faces.application.ViewExpiredException: /mainPanel.jsfNo saved view state could be found for the view identifier: /mainPanel.jsf
    at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:128)

目前,在faces-config.xml中定义了bean,以便与Eclipse的ide。

兼容

我不确定是什么导致这种情况,它绝对不会超时。 任何想法可能是什么问题?

如果我能提供任何进一步的信息,请告诉我..

谢谢!

P.S - 没有jsf-2.1标签

更新1 我认为60意味着1分钟! :-)这可能是问题所在。如果结果那么我会关闭这个问题

更新2 多数民众赞成不是......更多信息可能会有所帮助:

  1. 虽然该错误专门针对/mainPanel.jsf,但这实际上是使用<ui:include>
  2. 的xhtml组合
  3. 只有在我点击应用中的某个特定点时才会发生这种情况。由于点击而运行的代码是:
  4. Jquery代码:

        $(document).ready(function() {
    
        $("#someTable tr:not(:first)").click(function(event) {
    
                var someValue = $(this).find("input:hidden").val();
                $('#currently_selected').val(someValue );
                $('#currently_selected').change();
    
            });
        });
    

    JSF 2代码:

    <h:form prependId="false" class="hide">
        <h:inputText value="#{someBean.someBeanValue}">
            <f:ajax event="change" listener="#{someBean.someBeanValueChanged}" render=":anotherForm"
                onevent="ifCompleteSetWindowHash" />
        </h:inputText>
    </h:form>
    

2 个答案:

答案 0 :(得分:1)

在第一个视图中,它似乎是对javax.faces.ViewState隐藏字段的一些副作用。如果此字段被写入,则将抛出ViewExpiredException。尝试使用其他不同的javascript代码执行相同操作。

无论如何,它与您的session-config参数无关。此处提供的信息不足以复制它。如果之前的建议无法解决您的问题,请在MyFaces Issue Tracker上创建问题并附上示例。通过这种方式,你可以解决它。

答案 1 :(得分:0)

我相信$符号是JSF 中EL表达式的保留字符(编辑:如下所述,仅'$'不是保留的,但第三方组件库可能会使用各种javascript库这可能与jQuery有命名冲突。尝试将jQuery函数调用更改为显式的长表单名称,看看是否会产生影响。

EG。而不是......

$(document).ready(function() {

这样做......

jQuery(document).ready(function() {