Проблема с темой ZK и типом содержимого IE (.htc)

#java #internet-explorer #zk #html-components

#java #internet-explorer #zk #html-компоненты

Вопрос:

ОСНОВНОЙ ВОПРОС:

Есть ли способ установить mime-тип (content-type) элементов внутри jar, которые переносятся в тему ZK?

Расширенный фон (уже опубликован на форумах ZK без ответа)

Мы создаем theme .jar для нашего приложения, и я заставил все работать довольно хорошо, используя zkTheme.bat. Проблема, с которой я сталкиваюсь, однако, заключается в том, что мы используем PIE.htc (http://www.css3pie.com) для того, чтобы предоставить возможности CSS3 для IE 7 и IE 8 (в частности, только закругленные углы, градиенты и тень от окна). Единственный способ связать это внутри темы — указать на относительный ресурс внутри jar вот так:

   behavior:url(${c:encodeURL(c:cat3('~./',project,'/PIE.htc'))});
  

где c: — пространство имен для core, а project — корневой каталог проекта. Это указывает на правильный файловый ресурс, но заголовок устанавливается неправильно. Выполняя wget для файла, мы получаем следующее:

 HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Server: Apache-Coyote/1.1
  Last-Modified: Thu, 28 Apr 2011 12:36:54 GMT
  Cache-Control: public, max-age=31536000
  Expires: Fri, 27 Apr 2012 12:36:07 GMT
  Content-Type: ;charset=UTF-8
  Content-Language: en-US
  Content-Length: 28284
  Date: Thu, 28 Apr 2011 14:08:23 GMT
  Connection: keep-alive
Length: 28284 (28K) []
  

Как вы можете видеть, тип содержимого пуст. Вероятно, это связано с тем, что большинство файлов внутри .jar, которые обслуживаются, являются ресурсами изображений, а не файлами поведения. Вот что мы получим, если wget только сам файл.

 HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Server: Apache-Coyote/1.1
  Accept-Ranges: bytes
  ETag: W/"28280-1299679133268"
  Last-Modified: Wed, 09 Mar 2011 13:58:53 GMT
  Content-Type: text/x-component
  Content-Length: 28280
  Date: Thu, 28 Apr 2011 14:10:34 GMT
  Connection: keep-alive
Length: 28280 (28K) [text/x-component]
  

Итак, основная проблема заключается в том, что Internet Explorer не видит заголовок типа содержимого «text / x-component» и, следовательно, не использует код внутри .htc для правильного анализа CSS. Поэтому мой вопрос таков: есть ли способ заставить zk предоставить этот файл из .jar в качестве надлежащего типа содержимого? Просматривая конфигурации, я не вижу способа сделать это. Кроме того, я не могу найти базовый код, который обеспечивает извлечение из темы.jar для того, чтобы изменить код, чтобы определить этот тип содержимого. Я понимаю, что могу просто удалить PIE.htc где-нибудь на веб-сервере и указать на него за пределами темы jar, но это делает этот код намного менее переносимым и, следовательно, устраняет довольно значительную часть нашей логики для использования темы jar вообще.

Пожалуйста, обратите внимание: мы обслуживаем это на Tomcat, и я уже проверил web.xml чтобы убедиться, что text / x-component привязан, что так и есть (что, очевидно, так и есть, иначе второй wget не выдал бы то, что он сделал).

Ответ №1:

Итак, я нашел обходной путь, который максимально быстро и просто соответствует моим потребностям. В принципе, я просто заменил файл behavior.htc файлом behavior.htc.dsp и добавил следующую строку в начало:

 <%@ page contentType="text/x-component;charset=UTF-8" %> 
  

Мой первоначальный страх заключался в том, что IE не будет анализировать это как правильный тип файла из-за расширения, но, по-видимому, все, что его волнует, это тип содержимого в заголовке, так что это сработало.

Ответ №2:

Вы можете предоставить функцию EL, такую как c:encodeURL, чтобы вручную указать тип содержимого самостоятельно. Вы можете обратиться к этому руководству по определению функций .

Комментарии:

1. Спасибо, прыгун! Можно ли включить определение этой функции в theme.jar ? Например, есть пакет / класс (или, возможно, даже использовать zscript), который подключен с lang-addon.xml , а затем указать на TLD, который находится внутри packaged .jar, чтобы сделать все это? Причина в том, что нам нужно сделать это переносимым методом, который можно распространять внутри нашего theme.jar

2. На самом деле, теперь, когда я думаю об этом, я не понимаю, как это позволяет мне устанавливать тип содержимого, это просто позволяет мне возвращать значение на страницу dsp, что urlEncode и делает, получая соответствующее местоположение из jar, разархивированного ZK. Что мне нужно сделать, так это заставить ZK фактически изменить заголовок запроса на текст типа содержимого / x-компонент ресурса внутри этого jar.