Werner Punz created MYFACES-4742:
------------------------------------
Summary: ViewExpired Exception on simple ajax request in current
master branch
Key: MYFACES-4742
URL: https://issues.apache.org/jira/browse/MYFACES-4742
Project: MyFaces Core
Issue Type: Bug
Affects Versions: 5.0.0
Reporter: Werner Punz
Attachments: image-2026-02-07-20-47-59-972.png
I have a simple example which triggers a view expired exception despite the
request sending correct viewstate data. The example works on all branches
except the current main branch!
{code:java}
// code placeholder
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="jakarta.faces.html"
xmlns:ui="jakarta.faces.facelets"
xmlns:f="jakarta.faces.core">
<ui:composition template="./resources/templates/template.xhtml">
<ui:define name="content">
<h:form id="form1">
<h:commandScript name="callBeanAction"
action="#{commandScriptBean.doAction()}"
render="form1:result"
execute="@this" />
<h:outputText id="result" value="#{commandScriptBean.message}" />
<br />
<button type="button" onclick="callBeanAction()">
Call Action via h:commandScript
</button>
</h:form>
</ui:define>
</ui:composition>
</html>
{code}
{code:java}
// code placeholder
package extras.apache.org.jsintegration.protocol;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Named;
import java.io.Serializable;
@RequestScoped
@Named
public class CommandScriptBean implements Serializable {
private String message = "No action called yet.";
public void doAction() {
System.out.println("doAction triggered via h:commandScript");
message = "Action was called successfully!";
}
public String getMessage() {
return message;
}
}
{code}
the error message is a classical viewExpired Exception:
SCHWERWIEGEND: jakarta.faces.application.ViewExpiredException occurred while
processing RESTORE_VIEW [Location=]
jakarta.faces.application.ViewExpiredException: View "/commandscript.jsf" could
not be restored.
at
org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:183)
at
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:195)
at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:137)
at
org.apache.myfaces.webapp.FacesServletImpl.service(FacesServletImpl.java:163)
at jakarta.faces.webapp.FacesServlet.service(FacesServlet.java:102)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
at
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400)
at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739)
at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:1474)
And the request however is absolutely correct:
!image-2026-02-07-20-47-59-972.png|width=572,height=229!
--
This message was sent by Atlassian Jira
(v8.20.10#820010)