标签: view-scope

会话结束时销毁视图范围的bean

我的问题与此(或其他)有关:

@PreDestroy从未在@ViewScoped上调用

如此处所述,没有简单的解决方案来解决在导航时销毁视图范围的Bean的问题,并且在会话期满时似乎也是如此。

释放(调用该@PreDestroy方法)JSF视图范围的Bean 的非平凡方法会是什么样子,或者更确切地说,是会话期满后立即释放?

我在GlassFish 3.1.2上使用Java EE 6和Mojarra2.1.x。

jsf glassfish java-ee jsf-2 view-scope

3
推荐指数
1
解决办法
2150
查看次数

使用@ViewScoped时出现ViewExpiredException

我的h有问题:commandButton"登录":当我使用@ViewScoped并按下此按钮时会出现ViewExpiredException,但是当我使用@SessionScoped时,没有任何错误.

堆栈跟踪:

javax.faces.application.ViewExpiredException: /pages/register.xhtmlNo saved view state could be found for the view identifier: /pages/register.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.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Run Code Online (Sandbox Code Playgroud)

我的页面:

            <h:form>
                <h:panelGrid columns="2" >
                    <h:outputLabel value="Login:"/>
                    <h:inputText value="#{registerController.registerLog}"/>
                    <h:outputLabel value="#{msg.password}"/>
                    <h:inputSecret id="pass" …
Run Code Online (Sandbox Code Playgroud)

jsf myfaces jsf-2 viewexpiredexception view-scope

3
推荐指数
1
解决办法
9948
查看次数

primefaces更新pdf媒体无法正常工作

我有一个与浏览器中的Primefaces4 meida类型渲染pdf文件有关的问题.我已经成功地尝试了来自primefaces网站的展示示例.现在我想获得一个新功能,它在左侧面板中提供了一个带有文档节点的树结构.用户可以选择一个文档在中心面板中显示它.这意味着一旦用户选择了树上的一个文档,它就会在backbean中生成pdf媒体字段.

相关代码如下所示:

backbean:

@ManagedBean
@ViewScoped
public class DocumentsBean implements Serializable {

private static final long serialVersionUID = 3560539268513760978L;
private TreeNode root;
private String url;
private TreeNode selectedNode; 
private StreamedContent media;

public DocumentsBean() {
    root = new DefaultTreeNode("Root");
}

public TreeNode getRoot() {
    return root;
}

public TreeNode getSelectedNode() {  
    return selectedNode;  
}  

public void setSelectedNode(TreeNode selectedNode) {  
    this.selectedNode = selectedNode;  
}  

public void onNodeSelect(NodeSelectEvent event) {  
    File file = (File) this.selectedNode.getData();
    generatePDF(file);
}

public String getUrl() {
    return url; …
Run Code Online (Sandbox Code Playgroud)

media pdf jsf primefaces view-scope

3
推荐指数
1
解决办法
8569
查看次数

如何在JSF页面中通过EL将数据放入视图范围

在我的JSF页面中,这有效:

${requestScope.put('test', 'data')}
${requestScope.get('test')}
Run Code Online (Sandbox Code Playgroud)

这会导致异常:

${viewScope.put('test', 'data')}
${viewScope.get('test')}
Run Code Online (Sandbox Code Playgroud)

例外:

java.lang.NullPointerException
    javax.el.BeanELResolver.invoke(BeanELResolver.java:159)
    javax.el.CompositeELResolver.invoke(CompositeELResolver.java:84)
    org.apache.el.parser.AstValue.getValue(AstValue.java:157)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
    com.sun.faces.facelets.el.ELText$ELTextVariable.writeText(ELText.java:238)
    com.sun.faces.facelets.el.ELText$ELTextComposite.writeText(ELText.java:154)
    com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:85)
    com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
    com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Run Code Online (Sandbox Code Playgroud)

如何requestScope在JSF页面以外使用?我当然可以有一个视图范围的bean,但我认为我可以直接使用范围变量.我有Mojarra 2.2.10的Tomcat 8.0.21.

jsf facelets el jsf-2 view-scope

3
推荐指数
1
解决办法
888
查看次数

每个ajax请求都会调用@ViewScoped @PostContruct

使用Primefaces 5.0,JSF 2.2.7,部署在EAP 6.1上.

我在下面有这个Managed Bean.

import hh.bean.Service;
import hh.dao.ServiceDao;
import hh.dao.impl.ServiceDaoImpl;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class View1 implements Serializable {

    private static final long serialVersionUID = 1L;

    private ServiceDao serviceDao = new ServiceDaoImpl();

    @PostConstruct
    public void init() {
        System.out.println(View1.class.getName() + ": init() " + this);
    }

    public List<Service> getServices(){
        return serviceDao.getAllServices();
    }
}
Run Code Online (Sandbox Code Playgroud)

我从下面的xhtml中调用它.

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>Home Web</title>
    <f:facet name="first">
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta …
Run Code Online (Sandbox Code Playgroud)

ajax jsf primefaces view-scope

3
推荐指数
1
解决办法
1094
查看次数

具有钝化能力的bean必须满足具有钝化能力的依赖性

我对OmniFaces的Viewscoped有点小问题.即使我的Managedbean实现Serializable,我收到以下错误:

具有钝化能力的bean必须满足具有钝化能力的依赖性.

通过一些研究,我找到了一些关于这个问题的答案但没有成功.我解决了我的问题,序列化了我正在用CDI注入的其他类.

我的其他类是否真的有必要在我的Managedbean中实现Serializable注入?

环境 - WebSphere Application Server 8.5.5.2 - Apache MyFaces 2.0.2 - OmniFaces 1.7 - PrimeFaces 5.0

我的课:

public class AgrupamentoAcoRN{

@Inject
public TbSiglaAcoAgrupadaDAO dao;

public void insereDados(TbSiglaAcoAgrupada tbSiglaAcoAgrupada) throws BancoDeDadosException{
    dao.insereRegistro(tbSiglaAcoAgrupada);
}
}
Run Code Online (Sandbox Code Playgroud)

我的豆子:

@Named("agrupamentoAcoMb")
@ViewScoped
public class AgrupamentoAcoMB implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Inject
private AgrupamentoAcoRN rn;
}
Run Code Online (Sandbox Code Playgroud)

jsf serializable cdi omnifaces view-scope

3
推荐指数
1
解决办法
1340
查看次数

#{param}上的@ManagedProperty在@ViewScoped中不起作用

我的豆有这个:

@ManagedBean
@ViewScoped
public class BookBean implements Serializable
{       
    @ManagedProperty(value = "#{param.id}") // does not work with @ViewScoped
    private String id;

    public void init()
    {
        id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")
        if (id != null) {
            System.out.println("ID: " + id);
            currentBook = bookService.find(id);
        }
    }

    @PostConstruct
    public void post()
    {   
        // does not work with @ViewScoped
        System.out.println("ID: " + id);
        currentBook = bookService.find(id);    
    }

    public String getId() {
        return id;
    } 

    public void setId(String id) {
       this.id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)

目的地Facelet有这个:

<f:metadata> …
Run Code Online (Sandbox Code Playgroud)

jsf jsf-2 http-request-parameters view-scope

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

@ViewScoped在每次回发时创建新实例

我有以下托管bean.但每次我回到同一个bean的帖子,即在调用updateFileList时.我得到了一个新的FileDAO实例.

我怎么能阻止这个?在托管bean中使用DAO是否安全,如果没有,我可以做出哪些更改来改善它.

@ManagedBean(name = "file")
@ViewScoped
public class FileController implements Serializable {

    private static final long serialVersionUID = 1L;

    private List<LoadFileLog> fileList = null;
    private Date selectedDate;
    FileDAO fileDAO;

    public FileController() {

        System.out.println(" In file Controller constructor");
        ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
        ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
        fileDAO = (FileDAO) context.getBean("FileDAO");


    }


    public FileDAO getFileDAO() {
        return fileDAO;
    }





    public void setFileDAO(FileDAO fileDAO) {
        this.fileDAO = fileDAO;
    }





    public List<LoadFileLog> getFileList() {

        return fileList;

    }

    public Date getSelectedDate() {
        return selectedDate; …

jsf postback jsf-2 view-scope

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

JSF查看多次重建的Scoped Bean

我以为@ViewScoped当用户在同一页面上时,我认为应该阻止bean被重建...那么为什么我的@ViewScopedJSf控制器bean甚至在操作处理程序导致浏览器离开该视图之前被多次创建?

任何人都能指出我在正确的方向吗?

这是我的代码:

视图(domain/edit.xhtml)

<h:form prependId="false">
    <h:inputText id="descriptionField" value="#{domainEdit.domain.description}" />
    <h:commandButton id="saveButton" value="save" action="#{domainEdit.save}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

ViewScoped控制器(DomainEdit.java)

@Named("domainEdit")
@ViewScoped
public class DomainEdit implements Serializable {

    private static final long serialVersionUID = 1L;


    protected DomainEdit() {
    }

    @PostConstruct
    protected void init() {
        System.out.println("post construct called.");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("pre destroy called.");
    }

    public DomainEntity getDomain() {
        System.out.println("displaying domain...");

        // some code to return the domain
        return domain;
    }

    public String save() {
        System.out.println("saving...");

        // …
Run Code Online (Sandbox Code Playgroud)

jsf ejb java-ee view-scope

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

如何在SesionScoped bean中使用ViewScoped bean?

我有三个托管bean:一个作用域范围(S)和两个视图作用域(A,B).我想在S和B中使用A的功能,但问题是在会话范围内注入视图范围的bean是不可能的.

The scope of the object referenced by expression #{a}, view, is shorter than the referring managed beans (s) scope of session
Run Code Online (Sandbox Code Playgroud)

我不想复制A的功能.任何的想法?

jsf dependency-injection session-scope jsf-2 view-scope

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

在新选项卡/窗口中打开链接,而不会丢失当前 JSF 页面的视图范围

我需要2.xhtml在当前 JSF 页面(例如1.xhtml)的新选项卡中打开一个新的JSF 页面(例如)。我应该使用哪个 JSF 组件?<h:commandLink>或者<h:outputLink>

1.xhtml单击链接以2.xhtml在新选项卡中打开后,我不想失去当前页面的范围。

的豆1.xhtml@ViewScoped。我应该把它改成@RequestScoped吗?

navigation jsf new-window view-scope

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

如何将bean属性从一个视图传递到另一个视图

我正在使用JSF 2.1和Primefaces:

我有一个带有托管属性的视图作用域托管bean,以及一个在其他视图范围内的托管bean上设置内容并转发到引用该托管bean的其他页面的方法:

@ManagedBean
@ViewScoped
public class HelloMB {

   @ManagedProperty("otherMB")
   private OtherMB other;

   public String changeOtherMB() {
      otherMB.setAnyObject(new Object());
      return "otherPage.xhtml";
   }

}

@ManagedBean
@ViewScoped
public class OtherMB {

   private Object o;    

   public void setAnyObject(Object o) {
      this.o = o;
   }

}
Run Code Online (Sandbox Code Playgroud)

因此,当渲染otherPage时o为null.

你知道我怎么能解决这个问题?如何在@ViewScoped托管bean中保留对象并将其保存在其他页面上而不使用@SessionScoped

jsf parameter-passing managed-bean view-scope

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

如何计算用户 JSF 会话 (JSF 2.2) 中的视图数?

我正在尝试跟踪视图使用情况(达到默认的 15 计数限制),但不太确定从哪里获取此信息。它在 FacesContext 中可用吗?

使用 JSF 2.2、ICEfaces 3.3 和 Omnifaces 2.2。

jsf omnifaces view-scope jsf-2.2

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