Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有GAE和ViewScope ManagedBean的JSF2_Java_Google App Engine_Jsf 2_Primefaces - Fatal编程技术网

Java 带有GAE和ViewScope ManagedBean的JSF2

Java 带有GAE和ViewScope ManagedBean的JSF2,java,google-app-engine,jsf-2,primefaces,Java,Google App Engine,Jsf 2,Primefaces,我成功地获得了一个JSF2原型,并随后在谷歌AppEngine工作。现在,我对ViewScope ManagedBean有一些奇怪的行为: @ManagedBean @ViewScoped public class TestBean implements Serializable { private String text; //getter/setter private List<String> texts; //getter @PostCons

我成功地获得了一个JSF2原型,并随后在谷歌AppEngine工作。现在,我对ViewScope ManagedBean有一些奇怪的行为:

@ManagedBean @ViewScoped
public class TestBean implements Serializable
{
  private String text;         //getter/setter
  private List<String> texts;    //getter

  @PostConstruct public void init() 
  {
    texts = new ArrayList<String>();
    texts.add("Test");
    text = new String();
  }

  public void save(ActionEvent ae)
  {  
    texts.add(text);
    text = new String();
  }
}
更新1

以下是使用
@ManagedBean@ViewScoped
注释进行附加测试的结果:

在第一个请求(或页面的手动引用)期间,调用
@PostConstruct init()
方法。如果我单击按钮,什么也没有发生,那么对
test.jsf
的请求将记录在app engines日志中,但在我的
save()
方法中没有日志。Firebug向我显示了对
test.jsf
的POST请求和以下答案:

<?xml version='1.0' encoding='UTF-8'?>
<partial-response><error>
  <error-name>class javax.faces.application.ViewExpiredException</error-name>
  <error-message>
     <![CDATA[viewId:/test.jsf - View /test.jsf could not be restored.]]>
  </error-message>
  </error>
  <extension primefacesCallbackParam="validationFailed">
    {"validationFailed":false}
  </extension>
</partial-response>
我不确定是否应该尝试让myfaces正常工作,因为google在教程中明确提到了mojarra(2.0.4)

参考资料


通常情况下,我不会回答我的问题,我只将此答案视为一种解决方法,而不是正确答案。事件如果我不喜欢客户端状态保存,这似乎可以修复奇怪的行为。但我必须详细检查一下:

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

javax.faces.STATE_保存方法
客户

也许我们应该等到问题得到解决。

你能不能从开发人员的角度而不是从最终用户的角度详细说明“什么都没发生”的问题?像Firebug这样的HTTP流量调试器会说什么?是否发送ajax POST请求?究竟返回了什么样的响应?bean的操作方法是否被调用?setter是否被调用?bean不是不必要地(post)根据来自同一视图的每个请求构建吗?等等。打开调试器或进行穷人的调试,在战略位置插入一堆
System.out.println()
行,打印感兴趣的信息和/或变量。亲爱的BalusC,你完全正确。我将添加调试信息。感谢您指出这一点(并记住我的Firebug)!哈,你有一个
ViewExpiredException
。总而言之,这很好。下一个问题,你用的是MyFaces还是Mojara?什么版本?我记得以前在GAE上的MyFaces的某个版本上见过这种问题。无论如何,请尝试将JSF impl/version升级到GAE支持的最新版本。Servlet2.5容器的当前版本为2.0.6,Servlet3.0容器的当前版本为2.1.2(我不做GAE,但我认为它仍然支持MaxServlet2.5)。分别位于2.0.7和2.1.1。我发现了一个类似的SO问题:
<?xml version='1.0' encoding='UTF-8'?>
<partial-response><error>
  <error-name>class javax.faces.application.ViewExpiredException</error-name>
  <error-message>
     <![CDATA[viewId:/test.jsf - View /test.jsf could not be restored.]]>
  </error-message>
  </error>
  <extension primefacesCallbackParam="validationFailed">
    {"validationFailed":false}
  </extension>
</partial-response>
Uncaught exception from servlet
java.lang.NoClassDefFoundError: Could not initialize class
com.google.apphosting.runtime.security.shared.stub.javax.naming.InitialContext
<context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>client</param-value>
</context-param>