标签: view-scope

ViewExpiredException:找不到保存的视图状态:在JSF中提交表单时

我在尝试提交表单时遇到以下异常.

javax.faces.application.ViewExpiredException: /page1.xhtml No saved view state could be found for the view identifier: /page1.xhtml
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:132)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:94)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at …
Run Code Online (Sandbox Code Playgroud)

primefaces jsf-2 viewexpiredexception view-scope notserializableexception

9
推荐指数
1
解决办法
2万
查看次数

打开客户端状态保存时,ViewScoped bean是否已序列化到页面?

我们打开了客户端状态保存并使用ViewScoped支持bean.当打开客户端状态保存并且我们正在使用ViewScoped bean时,ViewScoped bean是否序列化到页面或是否说,存储在会话中,其中包含序列化到页面的令牌/密钥(以便页面可以回忆起来自会话的bean,如果页面被发布回自身)

这里的一个问题可能是,如果它是序列化的,那么我们可能会担心不会在ViewScoped bean上存储大型实例变量,因为它被序列化到页面并在线路上来回传递.

serialization jsf-2 view-scope

8
推荐指数
1
解决办法
2049
查看次数

使用JSF 2.2时,在每个回发请求上重新创建@ViewScoped bean

我有一个类似于这篇文章的问题和来自@BalusC的3个解决方案的答案,但是:

  • 我没有使用上面提到的EL表达式
  • 我不想再使用第二种解决方案(这对我来说足够复杂)
  • 和部分状态保存设置为false.

我的代码如下:

index.xhtml:

<?xml version="1.0" encoding="windows-1256" ?>
<!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="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Insert title here</title>
    </h:head>
    <h:body>
        <h:form>
            <p:panelMenu id="westMenu">
                <p:submenu id="sub1" label="System Monitor">
                    <p:menuitem id="menu1" value="live monitoring" 
                            action="#{menusBean.activateMenu('sub1_menu1')}" 
                            update=":centerPane,westMenu" 
                            disabled="#{menusBean.active['sub1_menu1']}" />
                    <p:menuitem id="menu2" value="reports" 
                            action="#{menusBean.activateMenu('sub1_menu2')}"
                            update=":centerPane,westMenu" 
                            disabled="#{menusBean.active['sub1_menu2']}" />
                </p:submenu>
                <p:submenu id="sub2" label="Charging System Nodes" />
                <p:submenu id="sub3" label="Additional Nodes" />
            </p:panelMenu>
        </h:form>
        <h:panelGroup id="centerPane">
            ...
        </h:panelGroup>
    </h:body>
</html>
Run Code Online (Sandbox Code Playgroud)

MenusBean.java:

package menus;

import …
Run Code Online (Sandbox Code Playgroud)

jsf postback primefaces view-scope jsf-2.2

8
推荐指数
1
解决办法
9891
查看次数

@ViewScoped托管bean在回发期间多次加载

我在jsf facelet上有一个日历,编辑器,fileUpload和一个dataTable primefaces控件.

代码如下,

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./../templates/masterlayout.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                xmlns:f="http://java.sun.com/jsf/core">

    <ui:define name="title">#{lbl.SSTitle}</ui:define>

    <ui:define name="content">
        <h:form>
            <p:panel header="Upload Script">
                <h:outputText value="Welcome #{loginActionBean.login.emp.empName}"/>
                <br />
                <p:calendar value="#{searchScriptActionBean.scheduleDate}" />
                <br />
                <p:fileUpload fileUploadListener="#{searchScriptActionBean.handleFileUpload}"
                              multiple="true" update="filsList" allowTypes="*.txt;*.init" description="Script Files">
                </p:fileUpload>
                <br />
                <p:editor value="#{searchScriptActionBean.htmlText}" />
            </p:panel>
            <p:dataTable id="filsList" value="#{searchScriptActionBean.scriptFiles}" var="file">

                <p:column>
                    <f:facet name="header">
                        <h:outputText value="File Name" />
                    </f:facet>
                    <h:outputText value="#{file.fileName}" />
                </p:column>

                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Size" />
                    </f:facet>
                    <h:outputText value="#{file.size}" /> …
Run Code Online (Sandbox Code Playgroud)

jsf postback primefaces jsf-2 view-scope

7
推荐指数
1
解决办法
7378
查看次数

Viewscoped JSF和CDI bean

我在JBoss EAP 6上使用Java EE 6,我的JSF bean注释如下:( @ManagedBean @ViewScoped两者都来自javax.faces.bean包)

然而,他们也CDI豆(默认构造函数,使用@Inject,@PreDestroy等等).我一直在阅读你不能混合这些注释(JSF和CDI),但它显然工作正常:注入正在工作,preDestroy在视图更改时被调用等).

我错过了什么吗?问题是什么?为什么不用?

jsf cdi view-scope

7
推荐指数
1
解决办法
4173
查看次数

为什么过期的@ViewScoped bean在会话到期之前不会被销毁

我在使用Java 7的GlassFish 4上使用Mojarra 2.2.4.

据我所知,从BalusC的回答是如何以及何时在JSF中销毁@ViewScoped bean?,@ViewScoped bean应该在三种情况下销毁:

  1. 回复非空结果
  2. 会话到期
  3. 超出会话中的最大逻辑视图数

我的bean在前两种情况下被销毁,但是在超过最大逻辑视图数时却没有.我已经验证了bean 在超过最大值时会过期(我得到一个ViewExpiredException),但是在会话本身到期之前它们仍然没有被销毁.

出于内存消耗的原因,我想在第三种情况下销毁bean,特别是因为它们在到期后无法使用.

问题

  • 为什么豆子到期时不会被销毁?
  • 这是一个错误还是预期的行为?
  • 什么是干净的解决办法,以确保豆类被摧毁?

最小的例子

这是我的豆子:

@javax.inject.Named("sandboxController")
@javax.faces.view.ViewScoped
public class SandboxController implements Serializable {
    private static final Logger log = Logger.getLogger(SandboxController.class.getName());
    @PostConstruct
    public void postConstruct() {
        log.log(Level.INFO, "Constructing SandboxController");
    }
    @PreDestroy
    public void preDestroy() {
        log.log(Level.INFO, "Destroying SandboxController");
    }
    public String getData() {
        return "abcdefg";
    }
}
Run Code Online (Sandbox Code Playgroud)

和我的sandbox.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML …
Run Code Online (Sandbox Code Playgroud)

jsf-2 managed-bean mojarra view-scope jsf-2.2

7
推荐指数
1
解决办法
4607
查看次数

与p:对话相比,PrimeFaces对话框架是否会破坏视图范围?

我正在使用PrimeFaces 5.

我想在按下按钮时打开一个对话框.

<p:commandButton value="add upload" actionListener="#{theForm.openUpload}" >
Run Code Online (Sandbox Code Playgroud)

public void openUpload() {
    this.item = new Item();
    RequestContext.getCurrentInstance().openDialog("uploadForm");
}
Run Code Online (Sandbox Code Playgroud)

对话框中将有一个保存按钮以保存输入.

<h:commandButton value="#{text['button.add']}" id="add" styleClass="btn btn-default" actionListener="#{theForm.confirmAdd}"/>
Run Code Online (Sandbox Code Playgroud)

public void confirmAdd() {
    RequestContext.getCurrentInstance().closeDialog("uploadForm");
}
Run Code Online (Sandbox Code Playgroud)

我的托管bean是@ViewScoped.如果对话框在PrimeFaces对话框架中的外部文件中,命令按钮是否会破坏视图范围?每当我点击"添加上传"按钮时,@PostConstruct就会再次调用该方法,就像范围丢失一样.

在的注释部分官方博客中表示,它不会打破的视图范围内,但这里核心开发者论坛上说,openDialog()创建一个新的观点,因此它打破了看法范围.

有人能证实吗?

jsf dialog primefaces view-scope

7
推荐指数
1
解决办法
3915
查看次数

当会话在 websphere 中失效时,Spring 视图范围不会被破坏

我正在使用Springboot 1.5.9.RELEASEJSF 2.2.20 (glassfish)Primefaces 8WebSphere 8.5.5.13上运行 ,并且我已经根据以下链接定义了自定义视图范围:

https://github.com/jneat/spring-jsf

public class ViewScope implements Scope, HttpSessionBindingListener {

private static final long serialVersionUID = 1L;

private static final Log logger = LogFactory.getLog(ViewScope.class);

private final WeakHashMap<HttpSession, Set<ViewScopeViewMapListener>> sessionToListeners = new WeakHashMap<>();

@Override
public Object get(String name, ObjectFactory objectFactory) {
    Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();
    //noinspection SynchronizationOnLocalVariableOrMethodParameter
    if (viewMap.containsKey(name)) {
        return viewMap.get(name);
    } else {
        synchronized (viewMap) {
            if (viewMap.containsKey(name)) {
                return viewMap.get(name);
            } else {
                logger.trace("Creating …
Run Code Online (Sandbox Code Playgroud)

websphere jsf spring view-scope spring-boot

7
推荐指数
1
解决办法
115
查看次数

ViewScoped bean的内存泄漏?

在我们 在JBoss 7.1.1上的JavaEE6项目(EJB3,JSF2)中,似乎我们有SeamFaces的内存泄漏.@ViewScoped

我们制作了一个小原型来检查这个事实:

  • 我们使用JMeter来调用页面200次;
  • 该页面包含并调用一个注入有状态EJB的viewscoped bean;
  • 我们将会话超时修复为1分钟.

在测试结束时,我们使用VisualVM检查内存的内容,这里我们得到了:

  • 使用@ViewScopedbean,我们仍然可以获得200个有状态实例MyController- 并且该@PreDestroy方法永远不会被调用;
  • 使用@ConversationScopedbean,@preDestroy方法称为会话结束,然后我们得到一个干净的内存.

我们是否严重使用视图范围,还是真的是一个错误?


这是XHTML页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"   
   xmlns:s="http://jboss.org/seam/faces">
   <f:metadata>
        <f:viewParam name="u" value="#{myBean.uselessParam}" />
        <s:viewAction action="#{myBean.callService}" />
   </f:metadata>
   <h:body >
        <f:view>
        </f:view>
   </h:body>    
</html>
Run Code Online (Sandbox Code Playgroud)

现在包含的bean myBean.对于@ConversationScoped变体,所有注释的部分都是未注释的.

@ViewScoped
// @ConversationScoped
@Named
public class MyBean implements Serializable 
{
    @Inject
    MyController myController; …
Run Code Online (Sandbox Code Playgroud)

memory-leaks cdi seam3 jsf-2 view-scope

6
推荐指数
2
解决办法
6697
查看次数

如何从Servlets访问@ViewScoped托管bean?

我想访问Servlet中的视图范围托管bean.

我搜索了类似的问题,得到了这些问题:

如何从视图范围中获取bean,FacesContext.getCurrentInstance()在Servlet中不适用,因为它应该给出null结果

JSF - 按名称获取托管bean,它处理所有其他范围但不处理viewcope

我会认为这是不可能的,不是吗?

有一个简单的解决方案可以将bean范围更改为会话范围,但这是最后的机会,因为我担心内存消耗.

我最后需要的是:managebean包含dataTable中显示的一些数据.同一页面应包括这些数据的图表表示的图像(强制性).图像可以由Servlet生成,但它需要访问数据或从db重新加载它们.

我也试过<p:graphicImage>PrimeFaces 2.X,但它与viewscope bean不兼容.有什么建议吗?

jsf servlets view-scope

6
推荐指数
1
解决办法
1599
查看次数