2

Google App EngineでJSFを使用しようとしていますが、SessionscopedBeanを使用すると問題が発生します。@Sessionscopedという注釈が付けられたクラスがあり、フォームに次のボタンだけが表示された1つのページがあります。Eclipseでこのボタンをクリックすると、currentNumberの値が毎回更新されます。これは、私が期待することです。ただし、App Engineにデプロイすると、リクエストごとに数値が0にリセットされるため、1を超えることはありません。何をしても、セッションの動作を取得できないように見えますが、常にrequestscopedであるかのように動作します。ローカルでは正常に動作しますが、デプロイすると動作しません。誰かアイデアはありますか?

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;


@ManagedBean(name = "controller")
@SessionScoped
public class Controller implements Serializable {


        private int currentNumber;


    public Controller() {

    }

    public int getCurrentNumber() {
        return currentNumber;
    }

    public void setCurrentNumber(int currentNumber) {
        this.currentNumber = currentNumber;
    }

    public void next() {
        currentNumber++;
    }
}

appengine.xmlの場合:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <version>1</version>

    <!-- Allows App Engine to send multiple requests to one instance in parallel: -->
    <threadsafe>true</threadsafe>

    <!-- Configure java.util.logging -->
    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
    </system-properties>
    <sessions-enabled>true</sessions-enabled>

</appengine-web-app>

そして最後にweb.xml:

<?xml version="1.0" encoding="utf-8" standalone="no"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
   <!-- ***** Designate client-side state saving. *****  -->
   <context-param>
      <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
      <param-value>client</param-value>
   </context-param>
   <!-- Set the default suffix for JSF pages to .xhtml -->
   <context-param>
      <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
      <param-value>.xhtml</param-value>
   </context-param>
   <!-- Disable use of threading for single-threaded environments such as
        the Google AppEngine. -->
   <context-param>
      <param-name>com.sun.faces.enableThreading</param-name>
      <param-value>false</param-value>
   </context-param>
   <!-- ***** Specify JBoss Expression Language Over Default -->
   <context-param>     
      <param-name>com.sun.faces.expressionFactory</param-name>
      <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
   </context-param> 
   <!-- ***** Load the JavaServer Faces Servlet ***** -->
   <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>/faces/*</url-pattern>
      <url-pattern>*.jsf</url-pattern>
   </servlet-mapping>
   <!-- ***** Specify session timeout of thirty (30) minutes. ***** -->
   <session-config>
      <session-timeout>30</session-timeout>
   </session-config>
 <servlet>
  <servlet-name>SystemServiceServlet</servlet-name>
  <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
  <init-param>
   <param-name>services</param-name>
   <param-value/>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>SystemServiceServlet</servlet-name>
  <url-pattern>/_ah/spi/*</url-pattern>
 </servlet-mapping>
</web-app>

アップデート:

jsfの実装をMykongsチュートリアルで言及されているものからMojarraの2.0.3バージョンに変更すると、不思議なことにうまくいきました。誰かがそれが起こる理由の手がかりを持っているなら、私はそれがどこにも言及されていないので、私は知りたいです。

4

0 に答える 0