当前位置: 首页 > 知识库问答 >
问题:

bean中的JSF CSV下载

童琪
2023-03-14

我的响应一直在output.write()行抛出NullPointerException。bean属于请求范围。关于空指针有什么想法吗?

    try
    {
        //submitForm();
        FacesContext fc = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();

        response.reset();
        response.setContentType("text/csv"); 
        //response.setContentLength(contentLength); 
            response.setHeader ( "Content-disposition", "attachment; filename=\"Reporting-" + 
                    new Date().getTime() + ".csv\"" );

        OutputStream output = response.getOutputStream();
        String s = "\"Project #\",\"Project Name\",\"Product Feature(s)\",";
        s+="\"Project Status\",";
        s+="\"Install Type\",";
        s+="\"Beta Test\",\"Beta Test New/Updated\",";
        s+="\"Production\",\"Production New/Updated\",";
        s+="\n";
        InputStream is = new ByteArrayInputStream( s.getBytes("UTF-8") );
        int nextChar;

         while ((nextChar = is.read()) != -1) 
         {
            output.write(nextChar);
         }
         output.close();

    }
    catch ( IOException e )
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

共有1个答案

季炯
2023-03-14

3个东西在这里跳出来

>

  • 未能调用FacesContext上的responseComplete()几乎意味着JSF将继续处理请求,您不能影响结果。

    reset()调用是不必要的。

    try
    {
    //submitForm();
    FacesContext fc = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
    
    
    response.setContentType("text/csv"); 
    fc.responseComplete();
    //response.setContentLength(contentLength); 
        response.setHeader ( "Content-disposition", "attachment; filename=\"Reporting-" + 
                new Date().getTime() + ".csv\"" );
    
    ServletOutputStream output = response.getOutputStream();
    String s = "\"Project #\",\"Project Name\",\"Product Feature(s)\",";
    s+="\"Project Status\",";
    s+="\"Install Type\",";
    s+="\"Beta Test\",\"Beta Test New/Updated\",";
    s+="\"Production\",\"Production New/Updated\",";
    s+="\n";
    InputStream is = new ByteArrayInputStream( s.getBytes("UTF-8") );
    int nextChar;
    
     while ((nextChar = is.read()) != -1) 
     {
        output.write(nextChar);
     }
        output.flush();
    
     output.close();
    
    }
    catch ( IOException e )
    {
     // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

  •  类似资料:
    • 通常在Spring上下文中,如果原型bean被注入到单例bean中,父类的属性将重写原型bean作用域。但是,如果在原型bean作用域中注入一个单例作用域bean会发生什么。仍然使用内部bean的get bean会返回内部bean的新实例吗?

    • 我有两个应用程序: > 应用程序父应用程序:Spring Boot应用程序。将应用程序子级用作库。 是否可以加载XML中定义的所有bean,并将它们放入上下文中?

    • 我有一个包含注入和强制(最终)字段的类。对于common,我可以使用micronatBean factory . get bean(type)或BeanContext.getBean(type)从上下文中获取bean,但是在这种情况下,我必须传递类型和参数。 我为此创建了简单的测试 对象(bean)代码 当我运行它时,我收到异常 io . micro naut . context . except

    • Spring具有bean类型/作用域,如 -singleton bean(每个应用程序上下文只有一个bean), -prototype bean(每个请求一个新bean) 现在,如果在单例bean中有对原型bean的引用,是否有办法在对单例bean的每个请求中获得一个新的原型bean(在单例bean中)。< br >如果是,配置会是什么样的?

    • 我有需要测试的REST服务。该服务具有Spring Security身份验证,我需要在测试或模拟中关闭它。我决定嘲笑它,因为我不能关掉它。我为此编写了,但现在未加载上下文: 在我的主要源代码中,我有一些config类加载了一些其他bean,而it类在我的测试中没有加载,我有一个例外: 我做错了什么?有人能帮我吗?我使用了,但在该版本中,无法工作,因为属性不再存在。

    • 我想不通..出于某种原因,Spring Junit没有将我的bean添加到上下文中。请砰!! 由:org.springframework.beans.factory.nosuchBeanDefinitionException引起:没有类型为“com.api.demo.store.FileStorage”的合格bean可用:需要至少有1个bean作为autowire候选bean。依赖项注释:{@or