Helo Jaroslaw, Does this happen the _very_ first time you click on the button, even when ajax is set to false for the button? ___
Kito D. Mann | @kito99 | Author, JSF in Action Virtua, Inc. | http://www.virtua.com | JSF/Java EE training and consulting http://www.JSFCentral.com - JavaServer Faces FAQ, news, and info | @jsfcentral +1 203-404-4848 x246 * Listen to the latest headlines in the JSF and Java EE newscast: * http://blogs.jsfcentral.com/JSFNewscast/* * Sign up for the JSFCentral Newsletter: http://oi.vresp.com/?fid=ac048d0e17 On Thu, Aug 9, 2012 at 8:11 AM, Jarosław Szczepankiewicz < jarr...@poczta.onet.pl> wrote: > Hi, > > I have a big (for me) problem with primefaces / myfaces. > Server: tomcat 7, myfaces: 2.1.2, jdk 7, primefaces 3.3.1 > > I have simple managed bean with @ViewScope. I have an edit form. I access > the form with GET parameter: > /be/cms/article.faces?id=3 > > which is used to load the Article from DB. Form shows ok and is in session > (i observer session id and it does not change). Then I click submit button. > I get: > ----------------- > [java] DEBUG [SessionTimeoutPhaseListener.java] beforePhase: > RESTORE_VIEW(1) > [java] DEBUG [SessionTimeoutPhaseListener.java] NO session timeout > detected... > [java] DEBUG [SessionTimeoutPhaseListener.java] afterPhase: > RESTORE_VIEW(1) > javax.faces.application.ViewExpiredException: /be/cms/article.facesNo > saved view state could be found for the view identifier: > /be/cms/article.faces > [java] at > org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:128) > ~[myfaces-impl-2.1.2.jar:2.1.2] > [java] at > org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171) > [myfaces-impl-2.1.2.jar:2.1.2] > [java] at > org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) > [myfaces-impl-2.1.2.jar:2.1.2] > [java] at > javax.faces.webapp.FacesServlet.service(FacesServlet.java:189) > [myfaces-api-2.1.2.jar:2.1.2] > [java] at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) > [catalina.jar:7.0.26] > [java] at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) > [catalina.jar:7.0.26] > [java] at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) > [catalina.jar:7.0.26] > [java] at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) > [catalina.jar:7.0.26] > [java] at > org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) > [tomee-catalina-4.0.0-beta-2.jar:4.0.0-beta-2] > [java] at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) > [catalina.jar:7.0.26] > [java] at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) > [catalina.jar:7.0.26] > [java] at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) > [catalina.jar:7.0.26] > [java] at > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) > [catalina.jar:7.0.26] > [java] at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) > [catalina.jar:7.0.26] > [java] at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) > [catalina.jar:7.0.26] > [java] at > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) > [tomcat-coyote.jar:7.0.26] > [java] at > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) > [tomcat-coyote.jar:7.0.26] > [java] at > org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) > [tomcat-coyote.jar:7.0.26] > [java] at > java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) > [na:1.7.0_03] > [java] at > java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) > [na:1.7.0_03] > [java] at java.lang.Thread.run(Unknown Source) [na:1.7.0_03] > ------------------- > SessionTimeoutPhaseListener is my class that implements PhaseListener, > strange thing is that phase listener shows that the exception is probably > after RESTORE_VIEW :(. > > The session is not timed out. I have org.apache.myfaces.VALIDATE = true. > ID of the session does not change. I have observed the PostConstruct > entrance but no PreDestroy on my bean so probably my bean still lives and > is ready to be bound to the view, but can not force the view to be restored. > I have used the following options: > > 1. facelets.BUILD_BEFORE_RESTORE = TRUE, does not matter > 2. javax.faces.STATE_SAVING_METHOD = client or server, does not matter > 3. changing AJAX to FALSE and using direct access does not matter > > The post does > I have lost almost all my hairs. I will appreciate any help & advice. , > thanks in advance > > Sources: > article.xhtml > ------------------------------------------------------ > <html xmlns="http://www.w3.org/1999/xhtml" > xmlns:ui="http://java.sun.com/jsf/facelets" > xmlns:h="http://java.sun.com/jsf/html" > xmlns:f="http://java.sun.com/jsf/core" > xmlns:p="http://primefaces.org/ui"> > > <f:metadata> > <f:viewParam name="id" value="#{articleEditBean.entryId}" > required="true" > requiredMessage="No entry specified."> > > <f:validateLongRange minimum="1" /> > </f:viewParam> > > <f:event type="preRenderView" > listener="#{articleEditBean.loadEntry}" /> > </f:metadata> > > <h:head> > <title>Artykul edycja</title> > </h:head> > > <body> > <ui:decorate template="/templates/masterDecorator.xhtml"> > <p:panel header="Edytuj artykul"> > > <h:panelGrid columns="2" cellpadding="5"> > > <p:outputLabel for="articleName" > value="Nazwa" /> > <p:inputText id="articleName" value="#{ > articleEditBean.article.name}" required="true"/> > > <p:outputLabel for="articleDescription" > value="Opis" /> > <p:inputTextarea id="articleDescription" > rows="5" cols="120" > counter="counter" maxlength="4096" > > value="#{articleEditBean.article.description}" > counterTemplate="{0} znakow > pozostalo." autoResize="false" /> > > <h:outputText value="" /> > <h:outputText id="counter" /> > <p:outputLabel for="articleContent" > value="Tresc" /> > <p:editor id="articleContent" > value="#{articleEditBean.article.content}" > width="600"/> > > </h:panelGrid> > </p:panel> > <p> > <p:commandButton value="Save" id="ajax" > ajax="false" actionListener="#{articleEditBean.listenSaveArticle}" > action="#{articleEditBean.saveArticle}" > icon="ui-icon-disk" /> > </p> > > > </ui:decorate> > </body> > </html> > ------------------------------------------------------ > > ArticleEditBean.java > ------------------------------------------------------ > @ViewScoped > @ManagedBean > public class ArticleEditBean implements Serializable{ > > /** > * > */ > private static final long serialVersionUID = -679841341548988167L; > > private Article article; > public Long getEntryId() { > logger.debug("getEntryId: {}", entryId); > return entryId; > } > > public void setEntryId(Long entryId) { > logger.debug("setEntryId: {} ",entryId); > this.entryId = entryId; > } > > public Article getArticle() { > logger.debug("getArticle(): {}", article); > return article; > } > > private Long entryId; > > @EJB > private ArticleService service; > > private static Logger logger = > LoggerFactory.getLogger(ArticleEditBean.class); > > public void loadEntry() { > logger.debug("entering articleBean.loadEntry"); > FacesContext ctx = FacesContext.getCurrentInstance(); > if (ctx.isValidationFailed()) { > ctx.getApplication() > .getNavigationHandler() > .handleNavigation(ctx, > "#{articleBean.loadEntry}", > "invalid"); > return; > } > > article = service.read(entryId); > > if (article == null) { > > ctx.getApplication() > .getNavigationHandler() > .handleNavigation(ctx, > "#{articleBean.loadEntry}", > "invalid"); > } > > > } > > public void listenSaveArticle(ActionEvent e){ > logger.debug("before listenSaveArticle... "); > FacesContext context = FacesContext.getCurrentInstance(); > Map<String, String> requestParams = > context.getExternalContext().getRequestParameterMap(); > > logger.debug("end of listenSaveArticle"); > > } > @PreDestroy > public void preDestroy(){ > logger.debug("pre destroy"); > } > > @PostConstruct > public void init() { > logger.debug("in post construct"); > > } > > public String saveArticle() { > logger.debug("entering articleEditBean.saveArticle()"); > if (article.getId() != null) { > service.update(article); > } else { > service.create(article); > } > > addMessage("Article " + article.getId() + " saved"); > logger.debug("exiting articleEditBean.saveArticle()"); > return "/be/welcome.xhtml?faces-redirect=true"; > } > > private void addMessage(String message) { > Flash flash = > FacesContext.getCurrentInstance().getExternalContext() > .getFlash(); > flash.setKeepMessages(true); > flash.setRedirect(true); > FacesContext.getCurrentInstance().addMessage(null, > new FacesMessage(message)); > } > > public void setArticle(Article article) { > logger.debug("setArticle(): {}", article); > this.article = article; > } > ------------------------------------------------------ > >