【问题标题】:JSF Seam @RequestParameter File/ImageJSF Seam @RequestParameter 文件/图像
【发布时间】:2011-08-28 17:48:56
【问题描述】:

我有一个支持 Bean,我在其中读取未绑定到组件的参数。 Seam 提供了读取获取参数的功能。我用过

@RequestParameter private String param1;

这样他就不会在验证错误时跳过我的操作方法,就像我使用的时候一样 ,因为我不想呈现 HTML 响应,而是重用业务逻辑。相反,我抓取响应流并自己编写呈现的响应

FacesContext ctx = FacesContext.getCurrentInstance();

final HttpServletResponse resp = (HttpServletResponse)ctx.getExternalContext().getResponse();      
resp.getOutputStream().write(xml.getBytes());
resp.getOutputStream().flush();
resp.getOutputStream().close();

ctx.responseComplete(); // render response phase done

我尝试从 HttpServletRequest inputStream 中读取文件,但该文件已经为空。有没有办法仍然从 JSF 获取“文件”。我可以使用一个单独的 servlet 并在那里处理它,但这会破坏我构建其余接口的方式。

感谢任何建议。

编辑:只是为了完整输入流的代码

final HttpServletRequest request = (HttpServletRequest)ctx.getExternalContext().getRequest();
ServletInputStream stream = request.getInputStream();
int byt = stream.read(); // byt was -1

编辑编辑:对不起,很长的帖子。现在我做了一个单独的servlet。即使 Firefug 说我传输了文件,我也得到一个空的输入流。怎么可能是空的?

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

boolean isMultipart = ServletFileUpload.isMultipartContent(req);
ServletInputStream stream= req.getInputStream();
int test = stream.read(); // test == -1

该 servlet 代码在单独的项目中运行良好,因此过滤器链中的一个 JSF/Seam servlet 必须删除数据。如果有人提示哪一个或如何检查。

【问题讨论】:

    标签: jsf file-upload seam


    【解决方案1】:

    SeamFilter 或更确切地说是 MultipartFilter 正在检查每个请求(如果它是 POST 和多部分请求)。如果是这样,他们将请求包装在 MultipartRequest 中,并将文件放在单独的参数映射中。

    final HttpServletRequestWrapper request = (HttpServletRequestWrapper)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    final ServletRequest innerRequest = request.getRequest();
    if(innerRequest instanceof MultipartRequest){
        byte[] imageData = ((MultipartRequest)innerRequest).getFileBytes("image");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2011-08-27
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多