【问题标题】:@ViewScoped works in development mode, but does not in production mode@ViewScoped 在开发模式下工作,但不在生产模式下
【发布时间】:2012-12-11 11:39:56
【问题描述】:

这段代码总是抛出 ViewExpiredException

@ManagedBean(name = "test")
@ViewScoped
public class test implements Serializable{

    private int count;

    public int getCount() {
        return count;
    }

    public void increment() {
        count++;
    }
}

和xhtml:

<body>
    <h:form>
        <h:panelGrid columns="2" cellpadding="5">
            <h:outputText value="Counter: " />
            <h:outputText value="#{test.count}" />
        </h:panelGrid>
        <h:commandButton value="Count" action="#{test.increment}" update="@form" />
    </h:form>
</body>

有什么诀窍吗? 会话存储在服务器中

【问题讨论】:

  • 尝试将private static final long serialVersionUID = ...添加到你的bean中...(你最好在JSF中使用&lt;h:body&gt;而不是),也可以试试&lt;context-param&gt; &lt;param-name&gt;javax.faces.STATE_SAVING_METHOD&lt;/param-name&gt; &lt;param-value&gt;client&lt;/param-value&gt; &lt;/context-param&gt;
  • 与 serialVersionUID 相同的异常,client 是解决方案,但我正在尝试使用 server跨度>
  • @mulax 你的 appengine-web.xml 中有&lt;sessions-enabled&gt;true&lt;/sessions-enabled&gt; 吗?还有,你用的是什么GAE SDK?

标签: java google-app-engine jsf-2


【解决方案1】:

取决于您的 GAE SDK 版本...但至少对于旧版本,必须将 javax.faces.STATE_SAVING_METHOD 设置为 client 因为 GAE 不支持它设置给session

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

【讨论】:

  • 我已经设置了几个月,希望有人找到一种使用 server 运行的方法。非常感谢,如果没有人回答,我会标记为正确答案
  • 尝试将其设置为没有 View scoped beans 的服务器,看看它是否有效...看看这篇文章(尚未阅读,但注意到使用 server 设置)@987654321 @ ...
  • SessionScoped 在开发和生产模式下工作。 ViewScoped 仅在开发模式下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
相关资源
最近更新 更多