Установка типа содержимого ответа в Struts2

Так что я'Я использую шаблоны бесплатных маркеров в Struts2 для формулирования моих ответов. Тем не менее, так как яя тоже пытаюсь использовать таконит, мне нужно отправить ответ с типом контента "Текст / XML», Я могу'Кажется, я не нашел способа использовать директивы freemarker для установки типа контента, и я недостаточно разбираюсь в структурах, чтобы знать, есть ли способ сделать это через это.

Итак, как я должен идти об этом?

Ответы на вопрос(5)

ВнедрениеServletResponseAware может работать в других ситуациях, но это не такпомочь с Freemarker и Struts2. :-( Я только что проследил это с помощью отладчика, и обнаружил, что ...

осуществляяServletResponseAwareМне был предоставлен доступ к ответу, и я мог изменить тип содержимого из своего действия. Хорошо.

как только мое действие было сделано, контроль вскоре оказался вorg.apache.struts2.views.freemarker.FreemarkerResult, который отображает шаблон

методpreTemplateProcess() устанавливает ответs content-type, игнорируя значение, которое я установил :-(

видимо тамс "пользовательский атрибут " это может быть использовано, чтобы переопределить это, но у меня нетне нашел никакого объяснения в Google еще

FreemarkerResult Сам класс может иметь тип содержимого, установленный для переопределения по умолчанию, но ... пока не уверен, откуда он может быть установлен, возможно, в конфигурации Struts?

Так что пока это неКажется, что действие может установить тип содержимого, но, к счастью, как замечает Томас выше, это отменяет все это:

${response.setContentType("text/xml")}

Так что по крайней мереможно из шаблонов. Конечно, было бы проще и безопаснее дать ряду производящих xml действий общий суперкласс, который позаботится об этом ...

Или, если вы предпочитаете аннотации:

@Result(name=SUCCESS, location="...", params={"contentType", "text/html"})

Ответил на мой собственный вопрос:

Используйте следующий код в типе шаблона:

${response.setContentType("text/xml")}

В вашем классе Action реализуетServletResponseAware интерфейс и использовать простой:

package your.package;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

public class YourAction extends ActionSupport implements 
                 ServletResponseAware {

  private HttpServletResponse response;

  public String execute() throws Exception{
    response.setContentType("image/png");
    return SUCCESS;
  }

  public void setServletResponse(HttpServletResponse response){
    this.response = response;
  }

  public HttpServletResponse getServletResponse(){
    return response;
  }
}

Больше информации здесь:http://www.roseindia.net/struts/struts2/strutsresources/access-request-response.shtml

 mac08 апр. 2013 г., 18:52
Более общее решение.
 Fakrudeen03 авг. 2010 г., 13:03
Это сработало для меня - не принято.
Решение Вопроса

Или вы можете установить его в Struts.xml


  
    text/html
 3urdoch25 нояб. 2011 г., 10:58
Это сработало для меня, не знаю, почему другие сказали, что это не такт.
 depsypher27 июн. 2012 г., 00:50
это описывает, что мне нужно было сделать для скорости:blog.bielu.com/2008/05/...

Ваш ответ на вопрос