为类型流的Struts2操作放置会话

时间:2014-12-05 11:24:16

标签: java struts2

我有一个Struts2动作,其中由stream生成的响应由velocity生成。但这是HTML和Javascript,但不是我需要的所有东西,如会话,cookie等。我怎么能在我的行动,会话和cookie中传递响应?

我的行动

@Action(value = "example", 
    results = { 
        @Result(name = "success", type = "stream", params = { "contentType", "text/html" }) 
    })
public String example() throws Exception {
    serviceId = (Long) getObjectSession("serviceId");
    selIdfile = Long.parseLong(idpreview);

    MpsServiceTemplate mpsServiceTemplate = mpsServiceTemplateDAO
            .getMpsServiceTemplateById(selIdfile);

    MpsService service = (MpsService) maasCustomDAO.loadbyId(MpsService.class, serviceId);

    String html = htmlBuilder.getHtml(service.getParent().getName(), service.getName(), new String(mpsServiceTemplate.getTemplateCode()), null);

    inputStream = new StringBufferInputStream(html);

    return SUCCESS;
}

1 个答案:

答案 0 :(得分:0)

Struts2在执行操作之前捕获servlet对象,如requestresponsesession。如果在堆栈中使用servletConfig拦截器,则可以使用这些对象填充操作。您也可以通过ServletActionContext访问它们。您可以将cookieProvider拦截器添加到操作

  

允许操作将Cookie发送到客户端,必须执行操作   CookieProvider。您必须在默认情况下引用此拦截器   堆栈或在操作堆栈中,请参见下面的示例。

     
<action ... >
  <interceptor-ref name="defaultStack"/>
  <interceptor-ref name="cookieProvider"/>
  ...
</action>

这将允许您在操作中将会话和cookie传递给响应。